LNK2019 При попытке наследовать класс - PullRequest
0 голосов
/ 16 ноября 2011

Итак, я пытаюсь унаследовать один класс от другого. У меня есть базовый класс 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);
}

И Erorr, который я получаю:

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 ]

2 голосов
/ 16 ноября 2011

Из сообщения об ошибке вы заявили, что не определили свой Entity::Entity(void); Возможно, вы забыли включить файл с его реализацией при компиляции / компоновке.

Редактировать: Небольшое отступление от стиля: в C ++ вы обычно хотите использовать что-то вроде: Entity() вместо Entity(void). В C void необходимо сделать прототипом функции, который сообщает компилятору об (отсутствии) параметров, а не объявлением функции, которое только сообщает компилятору тип возвращаемого значения. Однако в C ++ нет ничего эквивалентного объявлению функции C; объявление функции C ++ всегда включает информацию о типах параметров, поэтому пустые скобки указывают компилятору, что функция не принимает параметров.

0 голосов
/ 16 ноября 2011

Эта ошибка означает, что она не может связать объявление с реальной реализацией функции.

Что обычно означает, что вы не реализовали это или реализовали что-то, что, как вы думали, было, но на самом деле с немного другой подписью.

0 голосов
/ 16 ноября 2011

Вам не хватает реализации для Entity::Entity(void);

...