簡體   English   中英

繼承錯誤“未識別基類”

[英]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.hPlayState.h並且按照將State.h放置在PlayState.h之前的順序,則沒有理由得到特定錯誤(對於您發布的源代碼),除非除非您正在做一些愚蠢的錯字,例如錯過國家隊的帽子。 請檢查拼寫錯誤! 否則可能是問題的另一個原因。

您正在建立包含的循環依賴關系,應避免這種情況。
一個簡單的解決方案可能是在Global.h不同時包含State.hPlayState.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM