C ++ - 在派生类“成员函数未声明”(C++ - “Member function not d

2019-08-31 20:09发布

我在MSVC ++ 2008中的问题,在VS2008引发此编译错误:

error C2509: 'render' : member function not declared in 'PlayerSpriteKasua'

现在,有什么困惑我的是,渲染()的定义,但在继承的类。

类定义是这样的:

SpriteBase -Inherited By-> PlayerSpriteBase -Inherited By-> PlayerSpriteKasua

因此,SpriteBase.h的削减的版本如下:

class SpriteBase {
public:
  //Variables=============================================
  -snip-
  //Primary Functions=====================================
  virtual void think()=0;                         //Called every frame to allow the sprite to process events and react to the player.
  virtual void render(long long ScreenX, long long ScreenY)=0; //Called every frame to render the sprite.
  //Various overridable and not service/event functions===
  virtual void died();                            //Called when the sprite is killed either externally or via SpriteBase::kill().
  -snip-
  //======================================================
};

PlayerSpriteBase.h是这样的:

class PlayerSpriteBase : public SpriteBase
{
public:
  virtual void pose() = 0;
  virtual void knockback(bool Direction) = 0;
  virtual int getHealth() = 0;
};

最后,PlayerSpriteKasua.h是这样的:

class PlayerSpriteKasua : public PlayerSpriteBase
{
public:
};

我知道在它有会员加入,但是那只是因为我自己没有给它们添加。 这同样适用于PlayerSpriteBase; 有向左走在它其他的东西。

在PlayerSpriteKasua.cpp的代码是这样的:

#include "../../../MegaJul.h" //Include all the files needed in one go

void PlayerSpriteKasua::render(long long ScreenX, long long ScreenY) {
   return;
}
void PlayerSpriteKasua::think() {
  return;
}
int PlayerSpriteKasua::getHealth() {
  return this->Health;
}

当我输入,也就是说, void PlayerSpriteKasua:: ,智能感知弹出列表PlayerSpriteBase和SpriteBase蛮好的所有成员,但在编译像我上面所说的失败。

有没有我得到这个错误什么特别的原因?

PlayerSpriteBase.cpp是空的,在它没有什么作为呢。

SpriteBase.cpp设有大量的SpriteBase函数定义,并使用相同的格式PlayerSpriteKasua.cpp:

void SpriteBase::died() {
  return;
}

是一个例子。

Answer 1:

在PlayerSpriteKasua.h你需要重新申报任何方法你要重写/实现(不带“= 0”说,这些方法都不是抽象的了)。 所以,你需要像下面写吧:

class PlayerSpriteKasua : public PlayerSpriteBase
{
public:
    virtual void think();
    virtual void render(long long ScreenX, long long ScreenY);
    virtual int getHealth();
};

......还是你省略,以保持您的文章短?



Answer 2:

你需要在你的类定义提供了一个声明PlayerSpriteKasua ::渲染()。 否则,其他翻译单元,包括你的PlayerSpriteKasua.h将不能够告诉你提供了一个定义,将被迫得出结论,PlayerSpriteKasua不能被实例化。



Answer 3:

你需要重新声明SpriteBase的,你会在PlayerSpriteKasua以实现PlayerSpriteKasua的PlayerSpriteKasua.h声明的成员。



文章来源: C++ - “Member function not declared” in derived class