0

だから、私は別のクラスからクラスを継承しようとしています。基本クラスのエンティティがあり、そこから継承する必要のあるヒーロークラスがあります。

いつものように、私はこれを次のように行います:

#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 に答える