添加派生类会导致重影错误
Adding a derived class causes ghost errors
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);
};
相关文章:
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 避免模板类中的重定义错误
- 跨多个类的全局变量而不会出现重定义错误?
- C++ 预期的左大括号以及重定义错误
- Q 斯坦达项重定义错误
- VC++ C2011 重定义错误 - 未使用的头文件
- 为什么与函数相比,链接阶段没有类重定义错误?
- 编译时出现重定义错误
- 类型定义重定义错误
- 类类型重定义错误
- 如何修复带有命名空间的标头中常量的重定义错误?
- C++ 结构类型重定义错误
- 类型重定义错误(使用标头保护)
- 将代码移动到另一个标头后出现重定义错误
- 将成员枚举变量传递给类构造函数时出现无效的重定义错误
- 添加派生类会导致重影错误
- 即使使用 ifndef,C++ 重定义错误
- 虚拟方法重定向错误
- Visual Studio 15 - 重命名错误:在所选范围内找不到引用
- 'PolishStack'不是类模板,虚函数重影错误