我下面的代码产生了错误
'WorldObject': [Base class undefined (translated from german)]
这是为什么?这是产生此错误的代码:
ProjectilObject.h:
#pragma once
#ifndef _PROJECTILOBJECT_H_
#define _PROJECTILOBJECT_H_
#include "GameObjects.h"
class WorldObject;
class ProjectilObject: public WorldObject
{
public:
ProjectilObject(IGameObject* parent,int projectiltype);
void deleteyourself();
protected:
virtual void VProcEvent( long hashvalue, std::stringstream &stream);
virtual void VInit();
virtual void VInitfromStream( std::stringstream &stream );
virtual void VonUpdate();
virtual void VonRender();
private:
vec3 vel;
float lifetime;
float lifetimeend;
vec3 target;
int m_projectiltype;
};
#endif
这是 WorldObject 类的代码文件:
游戏对象.h:
#pragma once
#ifndef _GAMEONJECTCODE_H_
#define _GAMEONJECTCODE_H_
#include "IGameObject.h"
#include "Sprite.h"
#include "GamePath.h"
#include "HashedString/String.h"
#include "IAttribute.h"
#include "CharacterObjects.h"
...
class WorldObject: public IGameObject, public MRenderAble
{
public:
WorldObject(IGameObject* parent);
virtual bool IsDestroyAble();
virtual bool IsMageAble();
virtual bool IsRenderAble();
protected:
virtual void VProcEvent( long hashvalue, std::stringstream &stream);
virtual void VonUpdate();
virtual void VonRender();
virtual void VInit() =0;
virtual void VInitfromStream( std::stringstream &stream ) =0;
virtual void VSerialize( std::stringstream &stream );
vec3 poscam;
};
...
#endif
此文件中还有一些其他类,但我认为它们无关紧要。也许有一个我没有看到的小错误,但我不明白为什么会产生这个错误。当您需要更多代码时,请随意。
最佳答案
如果您有任何源文件在 ProjectilObject.h
之前包含 GameObjects.h
或不直接包含 ProjectilObject.h
,则编译器首先会通过GameObjects.h
中的include找到ProjectilObject
的声明,然后才知道WorldObject
是什么。这是因为 GameObjects.h
首先包含 ProjectilObject.h
,然后声明 WorldObject
。在这种情况下,ProjectilObject.h
中包含的 GameObjects.h
将不起作用,因为 _GAMEONJECTCODE_H_
已经定义。
为避免这种情况,请务必在源文件中包含 ProjectilObject.h
而不是 GameObjects.h
,或者使用 forward declarations .
关于c++ - 基类未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675618/