11

基本クラスのタイプが不完全です

このエラーは正確にはどういう意味ですか?どうすれば修正できますか?EntityPhysicsヘッダーでクラスを宣言しようとしclass Entityましたが、機能しませんでした。

これが私のEntity.hです

#ifndef __Game__Entity__
#define __Game__Entity__

#include <iostream>
#include <string>

#include "OGRE/Ogre.h"

#include "OgreInit.h"

class Entity{
public:
    Entity(std::string entityId, std::string mesh, Ogre::Vector3 position = Ogre::Vector3::ZERO, Ogre::Vector3 rotation = Ogre::Vector3::ZERO);
    virtual ~Entity() = 0;

    void setPosition(Ogre::Vector3 position);
    Ogre::Vector3 getPosition();
    void setRotation(Ogre::Vector3 rotationIncrease);
    Ogre::Vector3 getRotation();
    void setMesh(std::string meshName);
    std::string getMesh();
    virtual void tick() = 0;
    void removeEntity();

    Ogre::Entity getEntity();
    Ogre::SceneNode getSceneNode();

    std::string entityId;
protected:
    Ogre::Entity *ent;
    Ogre::SceneNode *nod;
};

#endif /* defined(__Game__Entity__) */

そして私のEntityPhysics.h

#ifndef __Game__EntityPhysics__
#define __Game__EntityPhysics__

#include <iostream>
#include <string>
#include "OGRE/Ogre.h"
#include "OgreBulletCollisionsBoxShape.h"
#include "OgreBulletDynamicsRigidBody.h"

#include "Entity.h"
#include "OgreInit.h"

class EntityPhysics: public Entity //error occurs here: "Base class has incomplete type"
{
public:
    EntityPhysics(std::string pentityId, std::string mesh, Ogre::Vector3 position, Ogre::Vector3 rotation, /*Physics Specific "stuff"*/std::string shapeForm = "BoxShape", float friction = 1.0, float restitution = 0.0, float mass = 1.0);
    virtual ~EntityPhysics() = 0;
    virtual void tick() = 0;
private:
    float friction, restitution, mass;

    OgreBulletCollisions::CollisionShape *collisionShape;
    OgreBulletDynamics::RigidBody *rigidBody;
};

#endif /* defined(__Game__EntityPhysics__) */

Entity.h子クラスも含めて関係があるのではないかと思いますが、そうすると同じエラーになります。

4

3 に答える 3

12

これはおそらく循環インクルードが原因であり、これを修正する方法は、インクルードを不要な場所から削除することです。

あなたはEntity.h必要ありません:

#include "OGRE/Ogre.h"
#include "OgreInit.h"

代わりに、型を前方宣言することができ、またそうすべきです。と同じEntityPhysics.h

#include "OGRE/Ogre.h"
#include "OgreBulletCollisionsBoxShape.h"
#include "OgreBulletDynamicsRigidBody.h"

#include "OgreInit.h"

実際に必要なのは。だけですEntity.h

于 2012-10-01T20:10:11.050 に答える
0

同様のエラーメッセージがあり、#includesをヘッダーファイルの下に移動して、他の#includesが望むクラス定義とメソッド定義が他のヘッダーインクルードよりも早く来るようにすることで解決しました。

于 2014-03-17T21:39:38.013 に答える
0

ベースクラスとして使用したいのに完了していない場合に発生します(ベースクラスに問題があります)。ベースのクラスをチェックして、すべてが正常かどうかを確認してください

于 2021-09-09T17:39:57.290 に答える