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

Compliler gives error in nonsense function

本文关键字:出错 错误 函数 无意义 编译器      更新时间:2023-10-16

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

objCEntity.o(.text+0x71a) || In function `ZN7CEntity6OnMoveEff':

objCArea.o(.bss+0x0) || In function `ZNSt6vectorI5CTileSaIS0_EEaSERKS2_':
objCApp_OnCleanup.o(.bss+0x0):C:DevCppbin..libgccmingw323.4.2........includec++3.4.2bitsvector.tcc || first defined here

注意,它给出的位置是某种obj文件,所以我不能看看它在我的代码中的位置。

我的C++有了很大的进步,但我仍然不能很好地理解编译器是如何工作的,我不知道可能是什么原因问题或如何解决此类问题。与代码不同问题谷歌真的很难,因为这些名字刚刚扰乱。

希望有人能帮助我,因为这阻碍了我,我就是找不到或者想办法解决!

(我决定不发布我的代码,因为它是许多相互关联的文件,我没有知道错误在哪里,但我正在努力遵循http://www.sdltutorials.com/sdl-tutorial-basics.我能上班的前几天但后来的那些似乎总是失败。这显然是我做错了什么因为当我使用示例时,它是有效的。)

许多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)'
相关文章: