2013-03-24 131 views
1

我在C連接兩個.cpp文件有問題++。下面是我的文件C++連接兩個.cpp文件

Header.h

//Header.h 
template <class T> class asd{ 
asd(); 
check(); 
print(); 
} 

file1.cpp

//file1.cpp 
//defines all methods in class asd 
#include "Header.h" 
template<class T> asd<T>:: asd(T a, T b){//codes} 
template<class T> T asd<T>:: check(T a){//codes} 
template<class T> void asd<T>::print(){//codes} 

file2.cpp

//file2.cpp 
//main method 
#include "Header.h" 
int main(){//codes} 

我不明白的事情是,代碼運行正常當我把main()放在file1.cpp裏面,但是當我把它們分成兩個文件時,它不會編譯。有人可以請指點?

編輯: 對於那些有同樣的問題,解決方案可以在這裏找到: http://www.cplusplus.com/forum/articles/14272/

+11

你不能把通用模板定義從聲明一個單獨的文件。 – chris 2013-03-24 19:41:04

+0

對此我表示歉意,這是一個重複的問題。我在網上找到了我的解決方案。謝謝! – txp111030 2013-03-24 22:26:09

回答

3

類模板的成員函數應該出現在頭文件。只需將功能定義從file1.cpp移至Header.h即可。

想象一下,你是編譯器。當編譯main,如果試圖以任何方式來實例化asd,編譯器需要能夠看到函數定義生成相應的代碼。例如,如果在main你做asd<int> my_asd;,編譯器需要實例asdT替換int。如果它看不到函數定義,那麼它不能爲函數做到這一點。

+0

如果問題沒有具體要求我們創建兩個單獨的.cpp文件,這將起作用。對不起,我對我的問題不是很清楚。無論如何,謝謝你的迴應! – txp111030 2013-03-24 22:26:52

+0

@ user2205010有些人喜歡有一個'.h'文件和'.tpp'文件,你'#include'底部*了'.h'文件的'.tpp'文件*。這實現了同樣的事情。 – 2013-03-24 22:27:43

+0

是的,這也可能是一個答案。我找到了最好的解決方案,並將其發佈在我原來的帖子中。原來的模板顯式實例解決了我的問題。非常感謝你! – txp111030 2013-03-24 22:29:23