C++ 如何定义模板类并将其划分为多个文件?
为了测试,我编写了一个简单的模板类。它编译时没有任何错误,但当我尝试在main()中使用它时,它会给出一些链接器错误。C++ 如何定义模板类并将其划分为多个文件?,c++,templates,linker-errors,header-files,C++,Templates,Linker Errors,Header Files,为了测试,我编写了一个简单的模板类。它编译时没有任何错误,但当我尝试在main()中使用它时,它会给出一些链接器错误。 main.cpp #include <iostream> #include "MyNumber.h" int wmain(int argc, wchar_t * argv[]) { MyNumber<float> num; num.SetValue(3.14); std::cout << &qu
main.cpp
#include <iostream>
#include "MyNumber.h"
int wmain(int argc, wchar_t * argv[])
{
MyNumber<float> num;
num.SetValue(3.14);
std::cout << "My number is " << num.GetValue() << "." << std::endl;
system("pause");
return 0;
}
#include "MyNumber.h"
template <class T>
MyNumber<T>::MyNumber()
{
m_Number = static_cast<T>(0);
}
template <class T>
MyNumber<T>::~MyNumber()
{
}
template <class T>
void MyNumber<T>::SetValue(T val)
{
m_Number = val;
}
template <class T>
T MyNumber<T>::GetValue()
{
return m_Number;
}
#包括
#包括“MyNumber.h”
int wmain(int argc,wchar_t*argv[])
{
mynum;
数值设定值(3.14);
std::cout您不能在cpp文件中实现模板。您需要在头文件本身中定义类方法。有关详细信息,请参阅此部分。实际上,您应该能够使用关键字,但几乎没有编译器实现它。您可以通过将非泛型代码提取到单独的函数(例如d在单独的文件中定义这些参数。您必须为使用的每个模板参数显式实例化模板
即,在MyNumber.cpp
文件末尾添加以下行:
template class MyNumber<float>;
模板类MyNumber;
这样,链接器将能够找到它需要的所有模板实例化
另请参见。我知道模板方法只能在头文件中定义。模板类也是这样吗?是的,类也是这样,除非您的编译器支持export
关键字(这在我的经验中是罕见的)
template class MyNumber<float>;