Jim*_*aid 8 c++ class base undefined
我的代码生成错误
'WorldObject':[Base class undefined(翻译自德语)]
为什么是这样?以下是产生此错误的代码:
#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
Run Code Online (Sandbox Code Playgroud)
以下是WorldObject类的代码文件:
#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
Run Code Online (Sandbox Code Playgroud)
这个文件中还有一些其他的类,但它们并不重要,我不这么认为.也许有一个小错误,我没有看到,但我不明白为什么会产生这个错误.当您需要更多代码时,请随意.
gzt*_*mas 10
如果您有任何源文件包含GameObjects.h之前ProjectilObject.h或未ProjectilObject.h直接包含,那么编译器将首先在知道内容之前ProjectilObject通过include 查找声明.那是因为首先包括然后声明.在这种情况下,存在的包含将不起作用,因为已经定义.GameObjects.hWorldObjectGameObjects.hProjectilObject.hWorldObjectGameObjects.hProjectilObject.h_GAMEONJECTCODE_H_
要避免这种情况,请确保包含ProjectilObject.h而不是GameObjects.h在源文件中,或使用前向声明.
如果不查看整个代码,很难回答这个问题。即使支架错位也能起到作用。检查您的命名空间 - 您确定 WorldObject 位于同一命名空间中吗?
我建议您通过将 #pragma 消息放置在 WorldObject 定义附近并检查编译器输出来使用它:
#pragma message(“世界对象已定义”)
如果未显示,请将编译指示移至父 .h 文件并再次检查编译器输出。这样你就可以很容易地定位到错误所在。
| 归档时间: |
|
| 查看次数: |
30585 次 |
| 最近记录: |