11

以下の私のコードはエラーを生成します

'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

このファイルには他にもいくつかのクラスがありますが、それらは問題ではないと思います。見たことのない小さなエラーがあるのか​​もしれませんが、なぜこのエラーが発生するのかわかりません。さらに多くのコードが必要な場合は、お気軽にどうぞ。

4

3 に答える 3

11

GameObjects.h前にインクルードしている、ProjectilObject.hまたはProjectilObject.h直接インクルードしていないソース ファイルがある場合、コンパイラは何が何であるかを知る前に、最初ProjectilObjectにインクルードを介しての宣言を見つけます。これは、最初にをインクルードしてから宣言するためです。その場合、既に定義されているため、現在のインクルードは機能しません。GameObjects.hWorldObjectGameObjects.hProjectilObject.hWorldObjectGameObjects.hProjectilObject.h_GAMEONJECTCODE_H_

これを回避するには、ソース ファイルProjectilObject.hの代わりにインクルードするか、前方宣言を使用してください。GameObjects.h

于 2012-05-20T17:45:17.030 に答える
5

コード全体を見ずにこの質問に答えることは困難です。ブレースの位置が間違っていてもカウントできます。名前空間を確認してください。WorldObject が同じ名前空間にあることを確認してください。

#pragma メッセージを WorldObject 定義の近くに配置し、コンパイラの出力を確認して使用することをお勧めします。

#pragma message (「World オブジェクトが定義されました」)

表示されない場合は、プラグマを親の .h ファイルに移動し、コンパイラの出力を再度確認します。これにより、エラーを簡単に見つけることができます。

于 2012-05-20T17:42:54.890 に答える
0

私の場合: 基本クラスのヘッダー ファイルから派生クラスのインクルードを削除します。

例えば:

ファイル 1 : #include "Bh"

-> A()

ファイル 2:

-> B() : A()

解決策: file1 から #include "Bh" を削除します

于 2020-09-15T09:10:51.407 に答える