0

我正在将 Codeblock IDE 与 MingW 一起使用,我一直存在以下类型的错误问题。(文件 || 消息)

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

或者

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上的教程。第一个很少有人可以开始工作,但后来的那些似乎总是失败。这显然是我做错了,因为当我使用示例时它可以工作。)

4

1 回答 1

0

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

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

MSVC 带有一个类似的实用程序:undname

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

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)'
于 2012-08-25T09:58:11.717 回答