テンプレート化されたクラスとテンプレート化されていないクラスを同じ .cpp ファイルに含めると、リンク時に問題が発生します。
C++ FAQ 35.13,35.14,35.15 を調べましたが、問題は解決しません。
http://www.parashift.com/c++-faq-lite/separate-template-class-defn-from-decl.html
私はclangでXcode 5を使用しています。
これが例です
barfoo.h
class bar{
public:
void barfunc();
};
template <class T>
class foo{
public:
void foofunc();
};
cpp ファイルは次のとおりです。
barfoo.cpp
void bar::barfunc(){...my code...}
template <class T>
void foo<T>::foofunc() {...my code...}
//I also put a instance of template class foo in the .cpp file
template class foo<int>;
//But is still generates the link error
エラーは
clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを確認するには -v を使用してください)
しかし、バークラスを削除すると、エラーが消えます。なぜこのエラーが発生するのか教えてもらえますか?
ヘッダーファイルに定義を入れると問題を解決できますが、コードの肥大化という別の問題が発生する可能性があります。別の解決策を提供できる人はいますか?