编译器在无意义函数中给出错误

时间:2012-08-25 08:47:41

标签: c++ mingw codeblocks

我正在使用CodeW IDE与MingW,我有一个持续的问题 有以下类型的错误。 (文件||消息)

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上的教程。我能开始工作的前几个 但后来似乎总是失败。这显然是我做错了 因为当我使用它时,它可以工作。)

1 个答案:

答案 0 :(得分:0)

许多GCC发行版(例如我使用的MinGW发行版)都带有一个实用程序名称c++filt,它会将C ++受损的名称变成更接近源代码声明的内容(我认为您的错误消息遗漏了一些下划线) ):

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

MSVC附带了类似的实用程序:undname

但是,您可能想要更新您正在使用的MinGW。我在错误输出中直接返回到MinGW 3.4.5(同样对于MSVC回到VC ++ 6),我得到了很好的解码名称:

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)'