大家好我只是想練習一些C++模板,但我得到鏈接器錯誤。有人可以幫我嗎? 這裏是我的代碼: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++編譯器。 我在這段代碼中遺漏了什麼嗎?
感謝您的回覆。它的工作原理,但沒有更好的方法來保護代碼? 例如,如果我想創建一個非開源庫? 我想將代碼導出到靜態庫。並將庫鏈接到其他項目...
'MyClass.cpp'和'main.cpp'分別編譯(不同的翻譯單元),所以當你的編譯器編譯MyClass.cpp時,它不知道哪個參數需要實例化。您需要將定義和聲明移至'main.cpp'。 – 2011-07-03 20:47:01