[英]Inheritance Error “Base Class Unidentified”
我有一個State類,如下所述,該類已完全實現。 我還有一個繼承State類的PlayState類,它也已完全實現。 我的編譯錯誤是“ playstate.h(6):錯誤C2504:'State':基類未定義”我已經在Global.h中檢查了它們的順序,State.h出現在PlayState.h之前
碼:
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);
};
謝謝
如果某些* .cpp在其之前的某個位置包含“ State.h”而沒有“ Global.h”,那么您將收到已發布的錯誤。
因為當“ State.h”包含“ Global.h”時,“ Global.h”不包含“ State.h”(由於#pragma once
),但其中包含“ PlayState.h”,因此最終您擁有“ PlayState.h” .h”在定義class State
之前包含。
只是不要做出如此怪異的圓形夾雜物。
如果您的Global.h
已經包含State.h
和PlayState.h
並且按照將State.h
放置在PlayState.h
之前的順序,則沒有理由得到特定錯誤(對於您發布的源代碼),除非除非您正在做一些愚蠢的錯字,例如錯過國家隊的帽子。 請檢查拼寫錯誤! 否則可能是問題的另一個原因。
您正在建立包含的循環依賴關系,應避免這種情況。
一個簡單的解決方案可能是在Global.h
不同時包含State.h
和PlayState.h
。 只需在PlayState.h
包含State.h
,就可以了。 Global.h
不會以這種方式建立任何循環依賴關系。
#pragma once
#include "Global.h"
class PlayState : public State
什么是“狀態”? 這就是編譯器所抱怨的。
您不能從尚未完全定義的類繼承。 查看文件PlayState.h,您在任何地方都沒有指定State類。
正確的代碼:
#pragma once
#include "State.h"
class PlayState : public State
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.