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

时间:2010-05-11 08:29:37

标签: 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);
};

创建和发现后,问题来自: 我创建了两个类: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命名有问题吗?

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

2 个答案:

答案 0 :(得分:5)

pGameStates.push_back( (CGameState*)gameLogo );

由于CGameStateLogoCGameState公开继承,因此演员阵容是不必要的。向上倾斜是隐含的。只需写下

pGameStates.push_back( gameLogo );

代替。


但这可能无法解决您的编译问题。至于那个,你好像在混淆GameState.hCGameState.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的错误)?