添加派生类会导致重影错误

Adding a derived class causes ghost errors

本文关键字:重影 错误 派生 添加      更新时间:2023-10-16

My base class (State.h):

#pragma once
#include <Windows.h>
#define WIN32_LEAN_AND_MEAN
#include <glGL.h>
#include <glGLU.h>
#include "StateManager.h"
class State
{
public:
    virtual ~State();
    virtual void update(double dt){}
    virtual void render(){}
};

派生类 (State_Test.h):

#pragma once
#include "State.h"
class State_Test : public State
{
public:
    State_Test();
    ~State_Test();
};

它给出的错误在不同的类中(StateManager.h):

#pragma once
#include "State.h"
#include <map>
#include <string>
class StateManager
{
public:
    StateManager();
    ~StateManager();
    std::map<std::string, State *> m_StateMap;//error C2976: 'std::map' :     too few template arguments | error C2065: 'State' : undeclared identifier | error C2059: syntax error: '>'
    std::string m_CurrentState;
    void AddState(std::string stateId, State *state);//error C2061: syntax error : identifier 'State'
    void ChangeState(std::string stateId);
};

还有这个警告:

Warning 5   warning C4005: '_malloca' : macro redefinition  c:program files (x86)microsoft visual studio 12.0vcincludecrtdbg.h 586 1 

从语法上看,它看起来是正确的,VS 没有下划线,而且这段代码以前没有错误。我只是想知道是否有人以前见过此错误或知道它的原因是什么?

你有循环依赖问题:State.h包括StateManager.h,其中包括State.h

由于StateManager只使用指向State的指针,因此删除此包含并转发声明State

#pragma once
//#include "State.h" -> remove this
#include <map>
#include <string>
class State; //-> add this
class StateManager
{
public:
    StateManager();
    ~StateManager();
    std::map<std::string, State *> m_StateMap;
    std::string m_CurrentState;
    void AddState(std::string stateId, State *state);
    void ChangeState(std::string stateId);
};