문제

VS2008 이이 컴파일 오류를 던지는 MSVC ++ 2008에 문제가 있습니다.

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

이제 나를 혼란스럽게하는 것은 Render ()가 정의되지만 상속 클래스에서 정의된다는 것입니다.

클래스 정의는 다음과 같이 작동합니다.

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::, Intellisense는 PlayersPritebase 및 Spritebase의 모든 구성원을 잘 나열하는 팝업이지만, 컴파일에서는 위에서 언급 한 것처럼 실패합니다.

이 오류가 발생한 특별한 이유가 있습니까?

PlayersPriteBase.cpp는 비어 있으며 아직 아무것도 없습니다.

Spritebase.cpp는 SpriteBase에 대한 많은 기능 정의를 가지고 있으며 PlayersPriteKasua.cpp : PlayersPriteKasua.cpp :와 동일한 형식을 사용합니다.

void SpriteBase::died() {
  return;
}

예입니다.

도움이 되었습니까?

해결책

PlayersPriteKasua.h에서는 "= 0"이 없으면 해당 메소드가 더 이상 추상적이지 않다고 말하기 위해 상체/구현하려는 모든 방법을 다시 결정해야합니다. 따라서 다음과 같이 써야합니다.

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

... 아니면 게시물을 짧게 유지하기 위해 생략 했습니까?

다른 팁

클래스 정의에서 PlayersPriteKasua :: Render ()에 대한 선언을 제공해야합니다. 그렇지 않으면, PlayersPritekasua.h를 포함한 다른 번역 장치는 당신이 정의를 제공했다고 말할 수 없으며, PlayersPritekasua는 인스턴스화 할 수 없다는 결론을 내릴 것입니다.

PlayersPritekasua.h에서 PlayersPritekasua의 선언에서 PlayersPritekasua에서 구현할 Spritebase 회원을 다시 고정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top