我的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);
};
创建和发现后,问题来自: 我创建了两个类: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);
};
VS命名有问题吗?
感谢您阅读此内容:)。事情发生了,我稍后会更新我的问题。抱歉浪费你的时间。
答案 0 :(得分:5)
pGameStates.push_back( (CGameState*)gameLogo );
由于CGameStateLogo
从CGameState
公开继承,因此演员阵容是不必要的。向上倾斜是隐含的。只需写下
pGameStates.push_back( gameLogo );
代替。
但这可能无法解决您的编译问题。至于那个,你好像在混淆GameState.h
和CGameState.h
。如果这是代码中的实际错误,而不是在编写问题时出现复制/粘贴错误,则可能会导致此问题。
也可能是您的标头中存在一些循环依赖问题。你写了
#include "GameState.h"
哪个应该定义GameState
类,除非该文件已经包含一次,但是类定义尚未被读取。例如,这可能以这种方式发生:
.cpp
文件包含GameState.h
。GameState.h
包括GameMain.h
。GameMain.h
包括GameStateLogo.h
。GameStateLogo.h
包含GameState.h
,但已包含此内容,因此#pragma once
会忽略包含。通常,头文件中的这种循环依赖是一件要避免的事情。
答案 1 :(得分:1)
CGameStateLogo.h包含GameState.h而不是CGameState.h。你是否有可能在include路径上有一个名为GameState.h的文件(因此你不会得到关于不能包含GameState.h的错误)?