C++ LNK2019和LNK1120,带模板函数
在这两个链接器错误出现一些问题之后,我又遇到了它们。然而,这一次的来源似乎在另一个点上 编译器错误表明它找不到签名为“C++ LNK2019和LNK1120,带模板函数,c++,linker-errors,C++,Linker Errors,在这两个链接器错误出现一些问题之后,我又遇到了它们。然而,这一次的来源似乎在另一个点上 编译器错误表明它找不到签名为“”的函数公共:unsigned int\uu thiscall MyClass::myFunction(int)const” 但是,将myClass.cpp的内容移动到main.cpp是可行的。不知道为什么(所有myClass.cpp的其他内容都没有这个问题。(其他函数没有模板化) myClass.h #ifndef X #define X class MyClass { pub
”的函数公共:unsigned int\uu thiscall MyClass::myFunction(int)const”
但是,将myClass.cpp
的内容移动到main.cpp
是可行的。不知道为什么(所有myClass.cpp
的其他内容都没有这个问题。(其他函数没有模板化)
myClass.h
#ifndef X
#define X
class MyClass {
public:
template<class T>
T myFunction (int someArgument) const;
};
#endif
main.cpp
#include "myClass.h"
template<class T>
T MyClass::myFunction (int someArgument) const {
return T();
}
#include "myClass.h"
int main () {
MyClass a();
a.myFunction<unsigned int>(42);
return 0;
}
#包括“myClass.h”
int main(){
MyClass a();
a、 我的功能(42);
返回0;
}
如何解决此问题?必须在头文件中定义函数模板。类方法的模板也不例外。请将方法的定义从“MyClass.cpp”移动到头文件“MyClass.h”
myClass.h
#ifndef X
#define X
class MyClass {
public:
template<class T>
T myFunction (int someArgument) const;
};
template<class T>
T MyClass::myFunction (int someArgument) const {
return T();
}
#endif
myClass.h
#ifndef X
#定义X
类MyClass{
公众:
模板
T myFunction(int-someArgument)const;
};
模板
T MyClass::myFunction(int-someArgument)常量{
返回T();
}
#恩迪夫
在“MyClass”的第一个非模板成员出现之前,根本不需要“MyClass.cpp”。因为编译器可以在main.cpp中找到模板函数的定义 模板不能被编译,编译器需要能够看到文件的定义,并且不能跨文件查看 要么在myClass.h中包含myClass.cpp,要么只定义标题中的所有内容