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,要么只定义标题中的所有内容