继承错误“基类未识别”

时间:2011-04-08 09:25:27

标签: c++

我有一个完全实现的State类,如下所述。我还有一个继承State类的PlayState类,它也完全实现了。我的编译错误是“playstate.h(6):错误C2504:'状态':基类未定义” 我已在Global.h中检查了他们的订单,StateState出现在PlayState.h之前

CODE:
STATE.H

#pragma once

  #include "Global.h"

class State
{
   public:
State(void);
virtual ~State(void);

virtual void Input(INPUTDATA* InputData);
virtual void Logic(OBJECT go[], INPUTDATA* InputData);
virtual void Render(OBJECT go[]);
virtual void InitGame(OBJECT go[]);
virtual void LoadGraphics(void);

void Toggle();
bool IsEnabled();

  private:
bool isEnabled;

 };

PlayState.h

#include "Global.h"

 class PlayState : public State
 {
  private:
#define UPDATESPEED 1000    // milliseconds between each update

// global variables
float camXAngle;
float camYAngle;
float camZoom;
int updatetime;
bool gameover;
float runspeed;
D3DLIGHT9 light;

SPRITE graphics;
SPRITE particleTexture;
MODEL terrain[2];
MODEL sky;

 public:
PlayState();
~PlayState();

void Input(INPUTDATA* InputData);
void Logic(OBJECT go[], INPUTDATA* InputData);
void Render(OBJECT go[]);
void InitGame(OBJECT go[]);
void LoadGraphics(void);
 };

由于

3 个答案:

答案 0 :(得分:4)

如果某个* .cpp包含“State.h”而没有“Global.h”,那么你将会遇到错误,你会发布错误。

因为当“State.h”包含“Global.h”时,“Global.h”不包含“State.h”(因为#pragma once)但它包含“PlayState.h”所以在最后,在定义class State之前包含“PlayState.h”。

只是不要制作这种奇怪的圆形内含物。

答案 1 :(得分:1)

如果您的Global.h已经包含State.hPlayState.h,并且按照State.h之前PlayState.h的顺序排列,则没有理由特别的错误(对于您发布的源代码),除非您正在制作一些愚蠢的拼写错误,例如在州内错过上限。请检查拼写错误!或者可能有其他原因导致问题。

您正在建立包含的循环依赖,应该避免 一个简单的解决方案可能是在State.h中不包括PlayState.hGlobal.h。 只需在State.h内加PlayState.h就可以了。 Global.h不会以这种方式构建任何循环依赖。

答案 2 :(得分:0)

#pragma once

#include "Global.h"

 class PlayState : public State

什么是“国家”?这就是编译器所抱怨的。

您不能从尚未完全定义的类继承。查看文件PlayState.h,您无处指定State类。

更正后的代码:

  #pragma once

#include "State.h"
 class PlayState : public State