0

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

在函数“__static_initialization_and_destruction_0”中:home/user/main.cpp:50:未定义对“PhysEng2D::PhysEng2D(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
}

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

抱歉,我知道这可能是我正在犯的一个非常愚蠢的小错误。

4

3 回答 3

6

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

改变

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

PhysEndg2D();
~PhysEng2D();

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

于 2011-05-09T14:48:32.593 回答
3

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

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

g++ -o myapp main.o physeng2d.o

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

于 2011-05-09T14:49:19.720 回答
2

您似乎忘记与PhysEng2D.o链接main.o。语法在类定义中也是PhysEng2D::PhysEng2D();无效的:它应该只是说PhysEng2D();.

于 2011-05-09T14:47:57.763 回答