我的下面的代码生成错误



为什么是这样?这是产生此错误的代码:

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/

10-09 05:57