基类未定义的WEIRD问题.需要帮忙

nXq*_*Xqd 0 c++

我的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命名有问题吗?

感谢您阅读此:).事情发生了,我稍后会更新我的问题.抱歉浪费你的时间.

Tho*_*mas 5

pGameStates.push_back( (CGameState*)gameLogo );
Run Code Online (Sandbox Code Playgroud)

由于CGameStateLogo从公开继承CGameState,演员是不必要的.向上倾斜是隐含的.简单写一下

pGameStates.push_back( gameLogo );
Run Code Online (Sandbox Code Playgroud)

代替.


但这可能无法解决您的编译问题.至于那个,你似乎在混淆GameState.hCGameState.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.

通常,头文件中的这种循环依赖是要避免的.