我有一个完全实现的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);
};
由于
答案 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.h
和PlayState.h
,并且按照State.h
之前PlayState.h
的顺序排列,则没有理由特别的错误(对于您发布的源代码),除非您正在制作一些愚蠢的拼写错误,例如在州内错过上限。请检查拼写错误!或者可能有其他原因导致问题。
您正在建立包含的循环依赖,应该避免
一个简单的解决方案可能是在State.h
中不包括PlayState.h
和Global.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