這對我來說是神祕的。我在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 to
鮑勃::鮑勃(INT,INT,浮動,浮動,浮動)' collect2:ld返回1退出狀態
我完全難住了。用g ++連接階段改變順序沒有區別。編譯目標文件不會產生任何問題。爲什麼在實現構造函數時使用未定義的引用?如果任何人都可以解釋這一點,這是非常感謝。
請參閱[爲什麼我無法將其聲明中的模板類的定義與其聲明分開並放入.cpp文件中?](http://www.parashift.com/c++-faq-lite/templates.html #faq-35.12)來自C++ FAQ Lite。 – 2010-08-03 19:27:10
@詹姆斯麥克奈利斯:爲什麼不把它作爲答案? :) – 2010-08-03 20:16:31
@Merlyn:我沒有時間寫出高質量的答案,並且一般認爲這是一種糟糕的形式,只是將鏈接發佈到另一個網站作爲答案,而不至少總結鏈接的內容。 – 2010-08-03 20:59:56