我的CGameStateLogo继承自CGameState:
CGameState.h
#pragma once
#include "GameMain.h"
#include "MyBitmap.h"
class CGameMain;
class CMyBitmap;
class CGameState
{
public:
CMyBitmap* pbmCurrent;
CGameMain* pGM;
int GameStateID;
virtual void MessageEnter () = 0;
virtual void MessageUpdate( int iKey ) = 0;
virtual void MessagePaint( HDC* pDC ) = 0;
void StateHandler ( int msg, HDC* pDC, int key );
public:
CGameState(void);
~CGameState(void);
};
Run Code Online (Sandbox Code Playgroud)
在创建和查找之后,问题来自于:我创建了两个类:CTest和CGameStateLogo
#pragma once
#include "GameState.h"
class CTest:CGameState
{
public:
CTest(void);
~CTest(void);
};
#pragma once
#include "GameState.h"
class CGameStateLogo:CGameState // Bug at this line
{
public:
CGameStateLogo(void);
~CGameStateLogo(void);
};
Run Code Online (Sandbox Code Playgroud)
VS命名有问题吗?
感谢您阅读此:).事情发生了,我稍后会更新我的问题.抱歉浪费你的时间.
pGameStates.push_back( (CGameState*)gameLogo );
Run Code Online (Sandbox Code Playgroud)
由于CGameStateLogo从公开继承CGameState,演员是不必要的.向上倾斜是隐含的.简单写一下
pGameStates.push_back( gameLogo );
Run Code Online (Sandbox Code Playgroud)
代替.
但这可能无法解决您的编译问题.至于那个,你似乎在混淆GameState.h和CGameState.h.如果这是代码中的实际错误,而不是在编写问题时出现复制/粘贴错误,则可能会导致此问题.
也可能是您的标头中存在一些循环依赖问题.你写
#include "GameState.h"
Run Code Online (Sandbox Code Playgroud)
它应该定义GameState类,除非该文件已经被包含一次,但类定义尚未阅读.例如,这可能以这种方式发生:
.cpp文件包括GameState.h.GameState.h包括GameMain.h.GameMain.h包括GameStateLogo.h.GameStateLogo.h包括GameState.h,但这已经被包括在内,因此包含被忽略了#pragma once.通常,头文件中的这种循环依赖是要避免的.