0

所以,我试图从另一个类继承一个类。我有基类 Entity,我有一个需要从它继承的 Hero 类。

像往常一样,我这样做:

#include "Entity.h"

class Hero : public Entity
{
public:
    Hero(Sprite* sprite_, Scene* scene, float xPosition, float yPosition, const char* name);
    ~Hero(void);
};

我的实体类:

#include "Sprite.h"
#include <vector>
#include "Scene.h"

class Entity
{
public:
    Entity(void);
    Entity(Sprite* Sprite_);
    Entity(Sprite* Sprite_, Scene* scene, float xPosition, float yPosition, const char*);
    ~Entity(void);
}

我得到的错误是:

1>Hero.obj : error LNK2019: unresolved external symbol "public: __thiscall Entity::Entity(void)" (??0Entity@@QAE@XZ) referenced in function "public: __thiscall Hero::Hero(class Sprite *,class Scene *,float,float,char const *)" (??0Hero@@QAE@PAVSprite@@PAVScene@@MMPBD@Z)

谁能告诉我我在这里做错了什么?

4

3 回答 3

2

从错误消息中,您已声明未定义您Entity::Entity(void);在编译/链接时您可能忘记将文件包含在其实现中。

编辑:风格方面的一个小问题:在 C++ 中,您通常想要使用类似的东西:Entity()而不是Entity(void). 在 C 中,void有必要创建一个函数原型来告诉编译器关于(缺少)参数的情况,而不是只告诉编译器返回类型的函数声明。然而,C++ 没有任何与 C 函数声明等价的东西。C++ 函数声明始终包含有关参数类型的信息,因此空括号告诉编译器该函数不接受任何参数。

于 2011-11-16T15:31:00.837 回答
0

你错过了一个实现Entity::Entity(void);

于 2011-11-16T15:30:11.903 回答
0

该错误意味着它无法将声明链接到实际的函数实现。

这通常意味着您没有实现它,或者您实现了您认为是它的东西,但实际上签名略有不同。

于 2011-11-16T15:31:53.533 回答