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 :)
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. –
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. –
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