C++模板类问题

1 c++ templates linker-errors

大家好,我只想练习一些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;
}
Run Code Online (Sandbox Code Playgroud)

这是命令行输出:

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
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在使用Ubuntu 10.04和GNU C++编译器.我在这段代码中遗漏了什么吗?


谢谢你的回复.它有效,但没有更好的方法来保护代码?例如,如果我想创建一个非开源库怎么办?!我想将代码导出到静态库.并将图书馆链接到其他项目......

Nik*_*sov 5

您必须将完整模板放入标题中.编译器需要在模板实例化的站点上查看模板方法的主体 - main.cpp在您的情况下.例如,参见C++ FAQ.