これは私にはまったく不思議です。私はubuntuでg++を使用していますが、これは私のコードの一部です(クラス名は変更されていますが、まだどこでもスタブを使用しているため、他には何もありません):
Bob.hpp
template <class A>
class Bob : public Jack<Chris, A>
{
public:
Bob(int x1, int x2, float x3 = 1.0, float x4 = 2.0, float x5 = 3.0) throw(Exception);
virtual ~Bob();
};
私はこのような別のファイルに実装しました:
Bob.cpp
template <class A>
Bob<A>::Bob(int x1, int x2, float x3, float x4, float x5) throw(Exception)
{
}
template <class A>
Bob<A>::~Bob()
{
}
そして私はそれをこのように使用しました:
main.cpp
int main()
{
Bob<Alice> instance(1, 2);
}
コンパイル:
g++ -c Bob.cpp -o Bob.o
g++ -c main.cpp -o main.o
g++ -L"libs" -llib main.o Bob.o prog
main.oを取得します:関数main':
main.cpp:(.text+0x1fd): undefined reference toBob :: Bob(int、int、float、float、float)'collect2:ldが1つの終了ステータスを返しました
私は完全に困惑しています。g++リンクステージで順序を変更しても違いはありません。オブジェクトファイルをコンパイルしても問題は発生しません。そして、コンストラクターを実装したときになぜ未定義の参照なのですか?誰かがこれに光を当てることができれば、それは大いにありがたいです。