- 締切済み
C++の分割コンパイルについて
C++のプログラムを分割コンパイルしようとしているのですが, どうしてもリンクの段階で関数名(コンストラクタとデストラクタ)が 未解決になってしまいます. template構文を用いているためだと思われるのですが, 何かうまい解決法や,ここが間違っているなど教えてください. ----- error message -------- /bin/ld: Unresolved: TList<int>::TList(void) TList<int>::~TList(void) collect2: ld returned 1 exit status ---------------------------- 問題のプログラムですが,templateを全て取り除いてコンパイル した場合には問題なく動きましたので,問題点はtemplateの利用方法 にあると思います. 以下にそのプログラムの一部を載せます. /////////////////////// // list.h /////////////////////// template <class Type> class TList { public : TList(); ~TList(); TList(const TList<Type> ©); TList<Type> &operator=(const TList<Type> &right); : : private : TListItem<Type> *list; }; template <class Type> class TListItem { friend TList<Type>; public : TListItem(Type copy_item, TListItem<Type> *copy_next = 0); ~TListItem(); private : Type item; TListItem<Type> *next; }; //////////////// // main.cpp //////////////// #include "list.h" TList<int>::TList(); int main() { TList<int> list; } TListのコンストラクタとデストラクタは他のファイルで定義しています.
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- onosuke
- ベストアンサー率67% (310/456)
テンプレートのときは,『TListのコンストラクタとデストラクタ(要はメソッド)を定義している他のファイル』の内容も list.h に読み込んであげなくちゃ駄目です。 list.hの最後に #include "TList.cpp" てな具合に付け足しましょう。 # わたしも昔,まちがえたことが…(^^;;;