C++ 中未定义的引用编译器错误

undefined reference compiler error in c++

本文关键字:编译器 错误 引用 未定义 C++      更新时间:2023-10-16

当我尝试编译我的代码时,我收到以下错误消息 -

在函数中 "__static_initialization_and_destruction_0": 首页/用户/主.cpp:50:未定义 参考资料 'PhysEng2D::P hysEng2D(void)'

第 50 行的唯一代码是 -

PhysEng2D Physics; 

PhysEng2D 的头文件是 -

#ifndef _PHYSENG2D_H_ 
#define _PHYSENG2D_H_ 
#include "primitives.h"
class PhysEng2D
{
public:
    PhysEng2D::PhysEng2D(); 
    PhysEng2D::~PhysEng2D();
    bool IsBoundingBoxCollision(PS2Sprite & S1, PS2Sprite & S2); 
    bool IsWallCollision(PS2Sprite & S); 
}; 
#endif

而 PhysEng2D 其余部分的开头是——

#include "primitives.h"
#include "physeng2d.h" 

PhysEng2D::PhysEng2D()
{
    //Nothing to Initialise 
}
PhysEng2D::~PhysEng2D()
{
    //Nothing to clean up
}

(我没有完整地包括这些方法,因为我认为它们不相关)

对不起,我知道这可能是我犯的一个非常愚蠢的小错误。

头文件中的构造函数和析构函数不应包含类的名称。

改变

PhysEng2D::PhysEng2D(); 
PhysEng2D::~PhysEng2D();

PhysEndg2D();
~PhysEng2D();

而且您不需要在.cpp中重新包含"primitives.h"。

您需要编译每个 cpp 文件,然后链接它们。

g++ -c -Wall main.cpp
g++ -c -Wall physeng2d.cpp
g++ -o myapp main.o physeng2d.o

您还应该从 .h 中的类定义中删除 PhysEng2D:: 前缀

看起来您忘记将PhysEng2D.omain.o链接。此外PhysEng2D::PhysEng2D();语法在类定义中无效:它应该只说PhysEng2D();.