2010-10-03 148 views
0

我正在寫一個矩陣程序:我有一個類來表示一個規則矩陣(RegMatrix)和一個類來表示一個稀疏矩陣(SparseMatrix),即:零的值。鏈接錯誤C++無法解析的外部符號

在每個H文件的開頭,我寫了相反的類聲明。例如,在SparseMatrix.h中,我編寫了RegMatrix類(以便編譯器能夠識別我指向這個類)。在每個cpp文件中,我都包含這兩個H文件。

我的程序編譯,但我有鏈接錯誤的負荷,稱「無法解析的外部符號。」

例如: 解析的外部符號「公用:int__thiscall RegMatrix :: getCol(無效)常量」(? getCol @ RegMatrix @@ QBEHXZ)」 [文件:SparseMatrix.obj]

我要瘋了試圖找出什麼是錯我的代碼..

+1

你在哪裏實現了'RegMatrix :: getCol()const'? – 2010-10-03 11:15:47

+0

您能否提供用於編譯代碼的命令或方法? – JoshD 2010-10-03 11:17:18

+0

檢查您是否爲您的庫提供了正確的路徑?你的代碼已經編譯好了。 – DumbCoder 2010-10-03 11:19:25

回答

0

基本上,這意味着在你的程序的東西正在使用getCol來自RegMatrix類,但是你的編譯不包含這樣一個例程的主體。

事情來尋找:

  • 你真的創建程序的執行?有完全相同的參數配置文件?
  • 您是否忘記將編譯該例程的源文件添加到要編譯並鏈接到程序中的源文件列表中? (在VisualStudio中,是否將它添加到項目中?)
  • 當您在.cpp文件中編寫代碼時,您是否意外地將RegMatrix::從例程名稱的前面離開?
0

這與頭文件的相互包含無關,儘管這不是一個好設計。你忘了或錯誤的定義(忘記了一些const限定符或類似的東西)。關於「不太好的設計」聲明:你顯然已經交錯了兩個類,所以它們不能獨立使用。你如何爲RegMatrix編寫單元測試,而不與SparseMatrix交錯,反之亦然?我建議讓兩個定義完全獨立,並添加一個矩陣類型轉換器實現,它知道兩個矩陣類型。考慮問題,如果您決定添加其他矩陣類型:您將不得不修改指數數量的文件,以添加轉換。對於大多數simplisitic設計可能看起來像:

regmatrix.h:

class RegMatrix { 
// stuff, no mention of SparseMatrix 
}; 

sparsematrix.h:

class SparseMatrix { 
// stuff, no mention of RegMatrix 
}; 

conversions.cpp:(與conversions.h聲明)

#include "sparsematrix.h" 
#include "regmatrix.h" 
#include "uppertriangular.h" // got it? 
//... 

namespace Conversions { 
void SparseToRegular(SparseMatrix& pTo, const RegMatrix& pFrom) { .. } 
void RegularToSparse(RegMatrix& pTo, const SparseMatrix& pFrom) { .. } 
} 
相關問題