【发布时间】:2012-05-27 09:14:20
【问题描述】:
我下面的代码会产生错误
'WorldObject':[未定义基类(从德语翻译)]
这是为什么?以下是产生此错误的代码:
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
这个文件中还有一些其他的类,但它们应该不重要,我不认为。也许有一个我没有看到的小错误,但我不明白为什么会产生这个错误。当您需要更多代码时,请随意。
【问题讨论】:
-
您的意思是
MRenderable而不是MRenderAble?此外,这两个文件之间存在循环依赖关系。您需要一个前向声明。 -
@chris 有和没有前向声明的相同错误。
MRenderable和MRenderAble与问题无关。我想。MRenderAble是我在“IAttribute.h”文件中创建的另一个类。 -
嗯,你需要包含一个完整的类来继承它,所以前向声明在那里没有用,但在你的
GameObjects.h中,ProjectilObject.h的前向声明可能就足够了。 -
你只能从 complete 类型继承。