2010-06-23 106 views
1

我得到這樣的錯誤:C++類重定義錯誤幫助

FxMathFunctions.h: In function 'FxInt32 IMin(FxInt32, FxInt32)': 

FxMathFunctions.h:13: error: redefinition of 'FxInt32 IMin(FxInt32, FxInt32)' 

FxMathFunctions.h:15: error: 'FxInt32 IMin(FxInt32, FxInt32)' previously defined here 

在FxMathFunctions.h我:

11: struct FxPoint2d; 
12: 
13: inline FxInt32 IMin(FxInt32 i1,FxInt32 i2) 
14: { 
15: if (i2 < i1) i1 = i2; 
16: return i1; 
17: } 

FxInt32中,我包括頭定義爲:

typedef long    FxInt32; 

如果說FxInt32正在被重新定義,或者如果整個功能是我不能被錯誤決定。

我該如何解決這個問題?

UPDATE我在上面添加了行號。

+0

FxMathFunctions.h的第13行和第15行是什麼? – bdonlan 2010-06-23 04:29:53

+0

這很奇怪。看起來行號有點向下移動了一點。 11-12行是什麼? – bdonlan 2010-06-23 04:48:45

+0

@bdonlan - 再次更新 – Elliot 2010-06-23 04:53:03

回答

0

移動函數的定義放在.cpp文件,只是有 在.h文件中的原型。讓關於優化

+0

爲此,我不會在.cpp中使用內聯,正確嗎?以及如何改變將原型放入.h中?內聯使用混淆了我,不要刪除它,因爲我將代碼移動到.cpp中? – Elliot 2010-06-23 04:45:55

+0

是的,不需要在.cpp文件中內聯。 inline關鍵字是一條指令,告訴編譯器複製整個函數實現,而不是僅僅調用該函數。只要刪除內聯,把FxInt32 IMin(FxInt32 i1,FxInt32 i2);在你的頭文件和.cpp文件中的定義中,你很好。 typedef當然也應該放在標題中。 – 2010-06-23 04:51:53

0

很難不知道什麼是上線13和FxMathFunctions.h的15說的編譯器擔心。也就是說,請記住C++在<algorithm>中有一個內置的std::minstd::max,它們適用於所有可比較的類型。

+0

謝謝,讓我看看這些。 – Elliot 2010-06-23 04:46:20

+0

添加鏈接到您的文檔 – bdonlan 2010-06-23 04:48:24

1

這就是說整個功能被定義了兩次。

我的心理調試的力量告訴我,你在某種程度上遞歸包括報頭,並且頭沒有對這種情況的發生適當的後衛。因此內聯函數被定義兩次。

+0

我的心理upvoting權力告訴我,你可能是正確的。 – 2010-06-23 04:52:09

+0

奇怪 - 爲什麼報告的行號會被移動呢? – bdonlan 2010-06-23 04:53:16

+0

我有一名頭球守衛,當然,我改變了它的名字。 #pragma也是一次 – Elliot 2010-06-23 05:10:15