LNK2019尝试继承类时

时间:2011-11-16 15:28:41

标签: c++ inheritance linker-errors lnk2019

所以,我正在尝试从另一个类继承一个类。 我有基类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)

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

3 个答案:

答案 0 :(得分:2)

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

编辑:除了样式之外的一个小问题:在C ++中,您通常希望使用类似:Entity()而不是Entity(void)的内容。在C中,void是一个函数原型,它告诉编译器关于(缺少)参数,而不是只告诉编译器返回类型的函数声明。但是,C ++没有任何与C函数声明等效的东西; C ++函数声明总是包含有关参数类型的信息,因此空括号告诉编译器该函数不带参数。

答案 1 :(得分:0)

您错过了Entity::Entity(void);

的实施方案

答案 2 :(得分:0)

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

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