2017-05-17 7 views
0

私はかなり新しいC++であり、ヘッダーやテンプレートの経験はあまりなく、それらを組み合わせた経験はありませんでした。だから、私が作成したクラスを使用しようとすると問題に遭遇しました。次のように私のクラス定義とヘッダは、次のとおりです。 J.hそれは、ヘッダーだためJ.テンプレートクラスのヘッダーを使用するC++

#ifndef J_H 
#define J_H 

template<class t> 
class J { 
     public: 
       void speak(); 
}; 

#endif 

J.cppは、関数定義を持つテンプレートクラスのヘッダファイルです。

#include "J.h" 
#include <iostream> 

template<class T> void J<T>::speak(){ 
     std::cout << "Hello from j"; 
} 

main.cppには、主な機能を持っており、私の問題は、私はg++ J.h J.cpp main.cppでコンパイルするとき、私はエラーundefined reference to J<int>::speak()を得るということですが、エラーなしg++ J.h J.cppランをやっJ.

#include "J.h" 

int main(){ 
     J<int> j; 
     j.speak(); 
} 

を使用しようとします。私は非常にテンプレートに新しいので、任意の助けに感謝します。前もって感謝します。

+1

おそらく[テンプレートはヘッダーファイルにのみ実装できますか?](http://stackoverflow.com/q/495021/5980430) –

答えて

0

代わりに、実装をヘッダーファイルに入れてください。

テンプレートの実装を独自のソースファイル(テンプレートエクスポート)に入れることができる標準がありましたが、この機能をサポートするコンパイラはまれでした(Comeauは私が信じていた唯一のものでした)。

IIRCでは、テンプレートのエクスポートはC++ 1xで廃止されました。

関連する問題