C++ 继承错误“;“基类未识别”;

C++ 继承错误“;“基类未识别”;,c++,C++,我有一个完全实现的State类,如下所述。我还有一个PlayState类继承了State类,它也是完全实现的。我的编译错误是“playstate.h(6):错误C2504:‘State’:基类未定义” 我已经检查了它们在Global.h,State.h中的顺序。h出现在PlayState.h之前 #include "Global.h" class PlayState : public State { private: #define UPDATESPEED 1000 // mil

我有一个完全实现的State类,如下所述。我还有一个PlayState类继承了State类,它也是完全实现的。我的编译错误是“playstate.h(6):错误C2504:‘State’:基类未定义” 我已经检查了它们在Global.h,State.h中的顺序。h出现在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);
 };
代码:
州政府

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);
 };
谢谢

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

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

更正代码:

  #pragma once

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

如果您的
Global.h
已经包含
State.h
PlayState.h
,并且按照
State.h
放在
PlayState.h
之前的顺序,则没有理由获取特定错误(对于您发布的源代码),除非你犯了一些愚蠢的错误,比如在州里漏掉了一个大写字母。请检查打字错误!或者问题可能还有另一个原因

您正在构建包含的循环依赖项,应该避免这种情况。
一个简单的解决方案可能是在
Global.h
中不同时包含include、
State.h
PlayState.h
。 只要将
State.h
包含在
PlayState.h
中就可以了
Global.h
不会以这种方式建立任何循环依赖关系。

如果某些*.cpp包含“State.h”而前面某个地方没有“Global.h”,则您将出现已发布的错误

因为当“State.h”包含“Global.h”时,“Global.h”就不包含“State.h”(因为
#pragma once
),而是包含“PlayState.h”,所以最后在定义
类状态之前包含了“PlayState.h”


只是不要做这样奇怪的循环包含。

虽然原始问题代码中没有包含,但user692270似乎表示在“global.h”中,它以正确的顺序包含state.h和PlayState.h。如果它再次包含在PlayState.h中,为什么会有什么不同?它是否曾经受到pragma的影响?在这种情况下,您更正的代码不会更正任何内容。您仍然会有相同的错误。@user692270:您能显示您的
Global.h
是什么样子吗?您的意思是在“Global.h”中包含“PlayState.h”,同时在“PlayState.h”中包含“Global.h”?@user692270:对。您必须显示“Global.h”内容和编译的*.cpp文件内容。“这里没有理由得到错误”不正确。如果某些*.cpp包含“State.h”而前面没有“Global.h”,那么您将遇到与poster完全相同的错误。@Serge Dundich:是的,我应该说是OP在源代码中发布的。我会做出修改,尽管经过编辑的建议可能会解决他的问题。是的。圆形夹杂物是需要避免的。
  #pragma once

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