2009-12-19 90 views
0

我很抱歉我很確定這是一個相當愚蠢的問題,但我無法讓它工作!Dev-C++中的多個文件,鏈接器錯誤。模板

我也不確定什麼信息是太多的信息,所以我可能不會提供足夠的信息,所以也很抱歉 - 只是問。

我開始在main.cpp中編寫一個類,它變得很大,所以我決定將它移到不同的源文件。我並不太確定如何做到這一點,也無法找到任何有助於解決互聯網資源(因此問題)的具體問題。

我從類定義開始,包括主程序函數上面的所有函數定義。這運行良好。然後我把它分成兩個獨立的部分。主函數上方的類聲明(我認爲這是正確的術語)以及主函數下面的函數定義。

這也運行得非常好。我開始將類聲明切成一個頭文件。這個頭文件的形式

#ifndef INC_MATRIX_H 
#define INC_MATRIX_H 
class matrix{ 
//ETC 
}; 
#endif 

我所讀的地方是有用的,但我不完全知道爲什麼,我認爲這是停止的功能重新聲明如果頭被包含不止一次。

所以目前我們有這個頭文件以及其他包括在內。然後是主函數,然後是主函數下面的函數定義。這也編譯和運行非常好。

我採取的下一步是將函數定義切割成它們各自的.cpp文件。對這個.cpp文件唯一的補充是一些額外的包含必須被添加到頂端(特別是iostream和cstdlib)。此外還包括了matrix.h文件。

在這個配置中,當我嘗試編譯和運行代碼時,Dev-C++會引發鏈接器錯誤。具體地說它們是形式

[連接子錯誤]未定義參考來matrix <bool>::matrix(int, int)

和代碼不運行(明顯)。 我該如何解決這個問題?提前致謝。

編輯:我們發現這是由於它是一個模板類,並且在matrix.cpp文件的範圍內,模板沒有引入到bool類型中。我現在想弄清楚如何解決這個問題,而不需要添加大量的代碼來分別讓每個函數接受每個給定的類型。 哦,我很欣賞我可以在頭文件中定義函數。但我認爲我們並不打算這麼做?我認爲這個想法是,你只是簡單地包含聲明。

+0

這個問題是「教我如何編程!」雖然互聯網是偉大的,但所有的書籍仍然是學習基礎知識的更好方式。谷歌搜索和SO問題只會讓你到目前爲止。一旦你獲得了一些基本面,他們會更好地回答有針對性的問題。 – 2009-12-19 20:27:32

回答

1

錯誤提示您的矩陣類是模板類。是嗎?也許發佈代碼會有所幫助。

如果它是模板類然後參見this FAQ關於將模板類分離爲標頭/實現的常見問題的描述以及對此問題的解決方案。

+0

:)。謝謝,這絕對是一個模板問題。讀完第一篇FAQ後,我完全理解爲什麼它不起作用。據我可以告訴它通過代碼尋找您的類的實現與它可以找到的任何類型(在我的情況下)T,然後編譯該類的特定版本的T類。它有點像自動超載。涼。現在要弄清楚如何解決它。 – VolatileStorm 2009-12-19 22:09:01

+0

在閱讀完其他FAQ後,我想知道是否有更好的解決方法?所有的功能都像個人模板範圍一樣定義。即對於每個功能(標題中預先聲明),它們都有 模板 坐在他們面前。這還挺好的,即使這樣做有點蠻橫。然而這會導致問題,如果我必須添加代碼沿線: 模板矩陣 ::矩陣(int,int); 因爲我必須爲每個數據類型添加一個AND函數。有沒有辦法做到這一點更短? – VolatileStorm 2009-12-19 22:17:48

1

我想你可能沒有添加matrix.cpp到你的項目。它必須將其構建到matrix.o並將其鏈接到main.o以創建您的.exe。