2012-08-25 17 views
0

我在MingW使用Codeblock IDE,我有一個持續存在的問題 ,出現以下類型的錯誤。 (文件||留言)Compliler在廢話功能中給出錯誤

obj\CEntity.o(.text+0x71a) || In function `ZN7CEntity6OnMoveEff': 

OR

obj\CArea.o(.bss+0x0) || In function `ZNSt6vectorI5CTileSaIS0_EEaSERKS2_': 
obj\CApp_OnCleanup.o(.bss+0x0):C:\DevCpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\c++\3.4.2\bits\vector.tcc || first defined here 

注意,它給人的位置是某種OBJ文件,所以我不能 看到它在我的代碼。

我的C++是提高了很多,但我現在還不能很好的理解 編譯器是如何工作的,我想不出什麼可能導致 問題或如何去解決這樣的問題。不像代碼 問題,它真的很難谷歌,因爲名稱剛剛 炒。

希望有人可以幫助,因爲它阻止我回來,我只是找不到 或找出解決辦法!

(我決定不發佈我的代碼,因爲它是許多相互關聯的文件,我不 知道哪裏出錯,但我想遵循http://www.sdltutorials.com/sdl-tutorial-basics教程,第幾我可以開始工作 但隨後後來者似乎總是失敗。這顯然是我做錯了 ,因爲當我用它工作的樣本。)

+6

這就是所謂的名字混搭。不要擔心,看看實際的錯誤信息,而不是它們的上下文。 (順便說一句,那些是鏈接器錯誤,而不是編譯器錯誤。) – Mat

+0

看起來好像你正在使用的MinGW - 或者至少是它正在查看的stl文件 - 是相當古老的(從2004年的3.4.2看起來)。來自舊DevCpp安裝的剩餘物可能是?如果您已經安裝了自帶MinGW的CodeBlocks版本,請嘗試清理路徑變量以確保DevCpp MinGW中沒有任何剩餘部分。或者只是卸載DevCpp和CodeBlocks,然後使用MinGW重新安裝CodeBlocks ... – sonicwave

+0

非常感謝! – Beetroot

回答

0

許多GCC分佈(如我用MinGW的發行版)配備了實用程序名c++filt一些東西,會將C++中的mangled名稱變成更接近源代碼聲明的東西(我認爲您的錯誤消息省略了一些下劃線):

C:\temp>c++filt __ZN7CEntity6OnMoveEff 
CEntity::OnMove(float, float) 

MSVC帶有一個類似的工具:undname

但是,您可能需要更新您正在使用的MinGW的。我直接在錯誤輸出回去MinGW的3.4.5(同樣,對於MSVC回到VC++ 6)獲得不錯的,demangled名稱:

class CEntity { 
    public: 
     void OnMove(float, float); 
}; 

int main() 
{ 
    CEntity ent; 
    ent.OnMove(1., 2.); 
} 

編譯使用MinGW 3.4.5:

C:\temp>g++ -o test.exe test.cpp 
C:\...\ccwlXEih.o:test.cpp:(.text+0x43): undefined reference to `CEntity::OnMove(float, float)' 
+0

謝謝!我以爲我已經下載了最新版本,但我現在會嘗試通過MinGW進行更新! – Beetroot