我的下面的代码生成错误
为什么是这样?这是产生此错误的代码:
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类的代码文件:
GameObjects.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
该文件中还有其他一些类,但是我认为它们没有关系。也许有一个我没有看到的小错误,但我不明白为什么会产生此错误。当您需要更多代码时,请随意。
最佳答案
如果您有任何在GameObjects.h
之前包含ProjectilObject.h
或不直接包含ProjectilObject.h
的源文件,则编译器将先通过ProjectilObject
中的include查找GameObjects.h
的声明,然后再知道WorldObject
是什么。这是因为GameObjects.h
首先包含ProjectilObject.h
,然后声明WorldObject
。在这种情况下,由于GameObjects.h
已经被定义,所以在ProjectilObject.h
中包含_GAMEONJECTCODE_H_
的操作将不起作用。
为避免这种情况,请确保在源文件中包括ProjectilObject.h
而不是GameObjects.h
,或者使用forward declarations。
关于c++ - 基类未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10675618/