大家好,我只是想练习一些 C++ 模板,但我遇到了链接器错误。有人可以帮我吗? 这是我的代码:
// File: MyClass.h
#ifndef _MYCLASS_H
#define _MYCLASS_H
template<class T> class MyClass {
T value;
public:
MyClass(T v);
~MyClass();
};
#endif // _MYCLASS_H
// File: MyClass.cpp
#include "MyClass.h"
template<class T> MyClass<T>::MyClass(T v) {
value = v;
}
template<class T> MyClass<T>::~MyClass() {
}
// File: main.cpp
#include "MyClass.h"
int main() {
MyClass<int> test(10);
return 0;
}
这是命令行输出:
g++ main.cpp -c
g++ MyClass.cpp -c
g++ main.o MyClass.o -o Out
main.o: In function `main':
main.cpp:(.text+0x1a): undefined reference to `MyClass<int>::MyClass(int)'
main.cpp:(.text+0x2b): undefined reference to `MyClass<int>::~MyClass()'
collect2: ld returned 1 exit status
make: *** [all] Error 1
如您所见,我使用的是 Ubuntu 10.04 和 GNU C++ 编译器。 我在这段代码中遗漏了什么吗?
感谢您的回复。它可以工作,但是没有更好的方法来保护代码吗? 例如,如果我想创建一个非开源库怎么办?! 我想将代码导出到静态库。并将库链接到其他项目...
最佳答案
您必须将完整的模板放入标题中。编译器需要在模板实例化站点查看模板方法的主体 - main.cpp
在您的例子中。参见,例如,C++ FAQ .
关于C++模板类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565348/