-1

J'ai un problème avec un fichier de mon projet, je suppose provoqué par certains problèmes d'inclusion. Le code lui-même a bien fonctionné mais comme j'ai changé certaines lignes dans d'autres fichiers, je reçois une erreur 'expected class name before' {'token'. J'ai déjà essayé d'utiliser des déclarations anticipées mais avec elles l'erreur se transforme en 'utilisation invalide de type incomplet' classe Entity '' (rapport de lignes de construction à la fin de la publication).nom de classe attendu avant le jeton {', héritage de classe

EntityPlayer.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_ 

Entity.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_ 

Erreur 'attendu nom de classe avant '{' jeton':

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{ 
        ^

Erreur « utilisation non valide d'incomplet tapez ':

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 
    ^

Je ne sais pas lequel des fichiers inclus vous aurez besoin pour m'aider mais aucun des fichiers listés dans la liste d'erreurs ne contient l'inclusion du fichier Entity.h.

Merci beaucoup à l'avance, espérons que vous pouvez me aider :)

+0

Vous ne pouvez pas dériver d'une classe à l'aide d'une déclaration forward. La définition de la classe de base doit être disponible pour en dériver. Essayez '# include' le fichier d'en-tête où' class Entity' est défini. –

+0

Chaque fichier d'inclusion doit avoir un '.cpp' correspondant qui l'inclut, même s'il est vide, cela aidera à trouver des problèmes dans la base include et n'attend pas qu'il soit inclus ailleurs. Si vous faites cela, vous pouvez trouver un problème dans un autre fichier d'inclusion à l'origine de ce problème. –

+0

Dans les modifications que vous avez effectuées récemment, n'incluez-vous pas 'EntityPlayer.h' dans' Entity.h'? Si 'le code lui-même a bien fonctionné mais que j'ai changé quelques lignes ... ', alors, pourquoi ne pas annuler vos modifications pour revenir à quelque chose qui fonctionne et répéter les changements un par un pour identifier celui qui mène à votre erreur ? Ensuite, vous pouvez poster une meilleure question avec de bons intrants. – jpo38

Répondre

0

Juste pour marquer cela comme une réponse. Paraphraser la discussion: Vérifiez votre chaîne d'inclusion pour voir si vous incluez EntityPlayer.h de Entity.h.