C++ 模板 class 错误 public: void __thiscall Number<int>::displayNumber(void)" (?displayNumber@?$Number@N@@QAEXXZ) 在函数 _main 中引用
C++ template class error public: void __thiscall Number<int>::displayNumber(void)" (?displayNumber@?$Number@N@@QAEXXZ) referenced in function _main
我收到以下 错误:
public: void __thiscall Number<int>::displayNumber(void)"
(?displayNumber@?$Number@N@@QAEXXZ) referenced in function _main
public: __thiscall Number<int>::Number<int>(int)"
(??0?$Number@N@@QAE@N@Z) referenced in function _main
当我的代码如下时
文件名............ Number.h
#ifndef NUMBER_H
#define NUMBER_H
#include<iostream>
#include<string>
using namespace std;
template <class T>
class Number
{
private:
T number;
public:
Number(T num);
void displayNumber(void);
};
#endif
文件名 ..................... Number.cpp
#include<iostream>
#include<string>
#include"Number.h"
using namespace std;
template <class T>
Number<T>::Number(T num)
{
number = num;
}
template <class T>
void Number<T>::displayNumber(void)
{
cout<<" Number is "<<number<<endl;
}
文件名...... main.cpp
#include<iostream>
#include<string>
#include"Number.h"
using namespace std;
int main()
{
Number<int> n(10);
n.displayNumber();
}
但是当我剪切我的主要代码并将其粘贴到 Number.cpp 文件中时,它运行得很好。
您必须将模板函数定义移至 header 文件。为什么,请看这里:Why can templates only be implemented in the header file?
如果您不喜欢这样,只需将 Number.cpp 重命名为 Number.inl 或其他名称,然后将其#include 到 Number.h 的底部即可。这具有将文件内容移动到 header 的效果,但仍然可以让您保留两个单独的文件以用于组织目的。
我收到以下 错误:
public: void __thiscall Number<int>::displayNumber(void)"
(?displayNumber@?$Number@N@@QAEXXZ) referenced in function _main
public: __thiscall Number<int>::Number<int>(int)"
(??0?$Number@N@@QAE@N@Z) referenced in function _main
当我的代码如下时
文件名............ Number.h
#ifndef NUMBER_H
#define NUMBER_H
#include<iostream>
#include<string>
using namespace std;
template <class T>
class Number
{
private:
T number;
public:
Number(T num);
void displayNumber(void);
};
#endif
文件名 ..................... Number.cpp
#include<iostream>
#include<string>
#include"Number.h"
using namespace std;
template <class T>
Number<T>::Number(T num)
{
number = num;
}
template <class T>
void Number<T>::displayNumber(void)
{
cout<<" Number is "<<number<<endl;
}
文件名...... main.cpp
#include<iostream>
#include<string>
#include"Number.h"
using namespace std;
int main()
{
Number<int> n(10);
n.displayNumber();
}
但是当我剪切我的主要代码并将其粘贴到 Number.cpp 文件中时,它运行得很好。
您必须将模板函数定义移至 header 文件。为什么,请看这里:Why can templates only be implemented in the header file?
如果您不喜欢这样,只需将 Number.cpp 重命名为 Number.inl 或其他名称,然后将其#include 到 Number.h 的底部即可。这具有将文件内容移动到 header 的效果,但仍然可以让您保留两个单独的文件以用于组织目的。