皆さん、私はちょうどいくつかのC++テンプレートを練習したいと思っていましたが、リンカエラーが発生します。誰でも助けてくれますか?ここ は私のコードです:あなたは、私はUbuntuの10.04とGNU C++コンパイラを使用しています見ることができるようにC++テンプレートクラスの問題
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
:ここ
// 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;
}
は、コマンドライン出力です。 このコードで何か不足していますか?
お返事ありがとうございます。それは動作しますが、コードを保護する良い方法はありませんか? たとえば、非オープンソースライブラリを作成する場合はどうなりますか? コードを静的ライブラリにエクスポートします。ライブラリを他のプロジェクトにリンクしてください。
'MyClass.cpp'と' main.cpp'は別々に(異なる翻訳単位)コンパイルされるので、あなたのコンパイラが 'MyClass.cpp'をコンパイルするとき、どの引数がインスタンス化されなければならないのか分かりません。定義と宣言を 'main.cpp'に移す必要があります。 –