-1

我的项目文件有问题,我猜是由一些包含问题引起的。代码本身运行良好,但由于我更改了其他一些文件中的一些行,我得到了一个“在 '{' token' 错误之前的预期类名”。我已经尝试使用前向声明,但错误更改为“无效使用不完整类型'类实体'”(帖子末尾的构建报告行)。

实体播放器.h

#ifndef _SHARED_GAME_ENTITY_ENTITYPLAYER_H_
#define _SHARED_GAME_ENTITY_ENTITYPLAYER_H_

//////////////////////////////////////////////////
//////////////////// INCLUDES ////////////////////
//////////////////////////////////////////////////


#include<array>
#include<iostream>
#include<windows.h>
#include<SFML/System.hpp>

#include<Shared/Game/Entity/Entity.h>
#include<Shared/Game/ItemStack.h>
#include<Shared/Game/Items.h>
#include<Shared/System/Types.h>

//////////////////////////////////////////////////
////////// STRUKTUREN; KLASSEN; OBJEKTE //////////
//////////////////////////////////////////////////

//class Entity; //forward declaration of 'class Entity' -> invalid use of incomplete type 'class Entity' line 27
class ItemStack;
class Items;

class EntityPlayer : public Entity{ //line 27
public:
    struct PlayerStats{
        int health;
    };

    EntityPlayer(const std::string ID, const GameMode mode);
    virtual ~EntityPlayer();
    virtual void                       update();
    virtual void                       setGameMode(const GameMode mode);
    virtual bool                       isInventoryOpen();
    virtual bool                       isInInventory(ItemStack* item);
    virtual bool                       removeFromInventory(ItemStack *item);
    virtual uint                       addToInventory(ItemStack* item);
    virtual PlayerStats                getPlayerStats();
    virtual AABB                       getAABB();
    virtual std::array<ItemStack*, 10> getHotbarItems();
    virtual std::array<ItemStack*, 40> getInventory();

protected:
    virtual bool isInventorySlotFree();
    virtual bool isHotbarSlotFree();
    virtual bool addToHotbarSlot(ItemStack* itemstack);

    bool                       m_inventoryOpen;
    bool                       m_ltp;
    GameMode                   m_mode;
    PlayerStats                m_stats;
    std::array<ItemStack*, 10> m_itemsHotbar;
    std::array<ItemStack*, 40> m_inventory;
};

//////////////////////////////////////////////////
/////////////////// PROTOTYPEN ///////////////////
//////////////////////////////////////////////////



#endif // _SHARED_GAME_ENTITY_ENTITYPLAYER_H_

实体.h

#ifndef _SHARED_GAME_ENTITY_ENTITY_H_
#define _SHARED_GAME_ENTITY_ENTITY_H_

//////////////////////////////////////////////////
//////////////////// INCLUDES ////////////////////
//////////////////////////////////////////////////

#include<map>
#include<iostream>
#include<windows.h>

#include<Shared/Game/World.h>
#include<Shared/System/Defines.h>
#include<Shared/System/Log.h>
#include<Shared/System/Types.h>

//////////////////////////////////////////////////
////////// STRUKTUREN; KLASSEN; OBJEKTE //////////
//////////////////////////////////////////////////

class World;

class Entity{
    friend class GameRegistry;

    #ifdef CLIENT
    friend class GameRenderer;
    #endif // CLIENT

public:
    Entity(const std::string ID, const std::string texture);
    virtual ~Entity();
    virtual void        update();
    virtual bool        linkWorld(World* world);
    virtual bool        isWorldLinked();
    virtual bool        setPosition(const Vec3d position);
    virtual bool        move(const Vec2zd value);
    virtual bool        move(const double x, const double z);
    virtual float       getRotation();
    virtual Vec3d       getPosition();
    virtual std::string getID();
    virtual std::string getTextureName();
    virtual std::string getTextureLocation();
    virtual AABB        getAABB();

protected:
    virtual int getNumericID();

    int         m_numericID;
    float       m_rotation;
    World*      m_world;
    Vec3d       m_position;
    std::string m_id;
    std::string m_texture;

public:
    static bool   isEntityRegistered(const std::string name);
    static Entity getEntityCopy(const std::string name);

protected:
    static std::map<std::string, Entity*> m_entitys;
};

//////////////////////////////////////////////////
/////////////////// PROTOTYPEN ///////////////////
//////////////////////////////////////////////////



#endif // _SHARED_GAME_ENTITY_ENTITY_H_

错误“'{'令牌之前的预期类名”:

In file included from src/Shared/Game/CraftingManager.h:13:0,
                 from src/Shared/Game/GameRegistry.h:16,
                 from src/Shared/Game/Blocks.h:18,
                 from src/Shared/Game/World.h:12,
                 from src/Shared/Game/Entity/Entity.h:12,
                 from E:\MasterS\Projekte\C++\Spiele\Project 008\src\Shared\Game\Entity\Entity.cpp:1:
src/Shared/Game/Entity/EntityPlayer.h:28:35: error: expected class-name before '{' token
 class EntityPlayer : public Entity{
                       ^

错误“不完整类型的无效使用”:

In file included from src/Shared/Game/CraftingManager.h:13:0,
                 from src/Shared/Game/GameRegistry.h:16,
                 from src/Shared/Game/Blocks.h:18,
                 from src/Shared/Game/World.h:12,
                 from src/Shared/Game/Entity/Entity.h:12,
                 from E:\MasterS\Projekte\C++\Spiele\Project 008\src\Shared\Game\Entity\Entity.cpp:1:
src/Shared/Game/Entity/EntityPlayer.h:28:29: error: invalid use of incomplete type 'class Entity'
 class EntityPlayer : public Entity{
                             ^
src/Shared/Game/Entity/EntityPlayer.h:24:7: error: forward declaration of 'class Entity'
 class Entity; //forward declaration of 'class Entity' -> invalid use of incomplete type 'class Entity' line 27
       ^

我不知道您需要哪些包含的文件来帮助我,但错误列表中列出的文件中没有一个包含文件 Entity.h 的包含。

非常感谢你,希望你能帮助我:)

4

1 回答 1

0

只是将其标记为已回答。解释讨论:检查您的包含链以查看您是否包含来自 Entity.h 的 EntityPlayer.h。

于 2016-01-07T22:35:53.697 回答