2011-11-16 56 views
0

所以,我試圖從另一個類繼承一個類。 我有基類實體,我有一個需要從它繼承的英雄類。LNK2019當試圖繼承一個類

像往常一樣,我這樣做是這樣的:

#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)" ([email protected]@[email protected]) referenced in function "public: __thiscall Hero::Hero(class Sprite *,class Scene *,float,float,char const *)" ([email protected]@[email protected]@@[email protected]@[email protected]) 

誰能告訴我是什麼我在這裏做錯了嗎?

回答

0

您缺少Entity::Entity(void);

+0

並非如此。再次閱讀消息。他缺少'Entity :: Entity(void)',它被* Hero :: Hero(Sprite *,Scene *,float,float,char const *)使用。 –

+0

哦,我覺得很愚蠢,我真的不知道它是從哪裏來的......儘可能接受你的答案! –

2

從錯誤消息的實現,你已經通過沒有定義聲明瞭Entity::Entity(void);你可能已經忘記了包括其執行文件,當您編譯/鏈接。

編輯:一個微不足道的風格:在C++中,你通常想要使用像:Entity()而不是Entity(void)。在C語言中,void對於創建一個函數原型是必要的,它告訴編譯器關於(缺少)參數,而不是函數聲明,它只告訴編譯器返回類型。然而,C++沒有與C函數聲明等價的任何東西;一個C++函數聲明總是包含有關參數類型的信息,所以一個空括號告訴編譯器該函數不帶參數。

+0

我沒有忘記包括任何東西,這是奇怪的事情..但是,感謝關於虛無的事情 –

0

該錯誤意味着它無法將聲明鏈接到實際的函數實現。

這通常意味着你沒有實現它,或者你實現了你以爲是的東西,但實際上簽名稍有不同。