Frage

Ich habe ein Problem in MSVC ++ 2008 in dem VS2008 wirft diesen Compiler-Fehler:

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

Nun, was ist verwirrend mich, dass () wird übertragen definiert ist, sondern in einer geerbten Klasse.

Die Klassendefinition funktioniert wie folgt:

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

Also, eine abgespeckte Version von SpriteBase.h ist die folgende:

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 ist dies:

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

Und schließlich PlayerSpriteKasua.h ist dies:

class PlayerSpriteKasua : public PlayerSpriteBase
{
public:
};

Ich weiß, gibt es keine Mitglieder in es noch nicht, aber das ist einfach, weil ich das Hinzufügen sie nicht bekommen hatte. Das Gleiche gilt für PlayerSpriteBase; es gibt andere Sachen, um es zu gehen links.

Der Code in PlayerSpriteKasua.cpp ist dies:

#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;
}

Wenn ich schreibe, sagen wir, void PlayerSpriteKasua::, Intellisense erscheint alle in dem die Mitglieder von PlayerSpriteBase und SpriteBase ganz gut, aber auf kompilieren es nicht, wie ich oben gesagt.

Gibt es einen besonderen Grund, warum ich diesen Fehler bin immer?

PlayerSpriteBase.cpp ist leer und hat nichts drin als die noch.

SpriteBase.cpp hat viele Funktionsdefinitionen für SpriteBase und verwendet das gleiche Format wie PlayerSpriteKasua.cpp:

void SpriteBase::died() {
  return;
}

ist ein Beispiel.

War es hilfreich?

Lösung

In PlayerSpriteKasua.h müssen Sie erneut zu erklären, was Methoden Sie gehen zu überschreiben / implementieren (ohne „= 0“ zu sagen, dass diese Methoden nicht mehr abstrakt sind). Sie müssen also, es schreiben wie folgt:

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

... oder versäumte Sie, dass, um Ihre Post kürzer?

Andere Tipps

Sie müssen eine Erklärung für PlayerSpriteKasua schaffen :: render () in der Klassendefinition. Ansonsten andere Übersetzungseinheiten Ihrer PlayerSpriteKasua.h einschließlich nicht in der Lage sein zu sagen, dass Sie eine Definition zur Verfügung gestellt hatten, und wären gezwungen, zu dem Schluss, dass PlayerSpriteKasua kann nicht instanziert werden.

Sie müssen die Mitglieder von SpriteBase deklarieren, die Sie in PlayerSpriteKasua in der Erklärung von PlayerSpriteKasua in PlayerSpriteKasua.h implementieren werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top