2016-11-25 2 views
-3

je fichier d'en-tête dans mon projet:variable de champ déclarée erreur vide lorsque vous essayez d'utiliser l'objet de classe personnalisée

#ifndef COMMONINCLUDES_H 
#define COMMONINCLUDES_H 

#include "utilities.h" 
#include "textOutput.h" 
#include "game.h" 

class Player 
{ 
public: 

    int score; 
    int poX, posY; 
}; 

#endif // COMMONINCLUDES_H 

Et puis dans un autre fichier d'en-tête je

#include <commonincludes.h> 

void turn(Player *currplayer, int mapSize); 

et la correspondance fonction dans son propre fichier cpp. J'obtiens une variable de champ déclarée erreur sur la ligne du prototype de la fonction, et une erreur disant 'Player' n'a pas été déclarée dans cette portée malgré l'inclusion du fichier d'en-tête avec celle-ci. En regardant à travers un tas d'autres discussions ici à propos de l'erreur, je n'ai pas trouvé celui qui n'était pas pour tout le code dans un fichier ou causé par une erreur que j'ai exclu. Je sais que j'ai fait quelque chose comme ça avant et je l'ai mis au travail mais je n'arrive pas à comprendre ce que je fais différemment cette fois-ci. J'ai aussi que déplacer la définition de la classe (copier coller donc je sais que je ne change rien avec la définition de la classe) au fichier d'en-tête "utilities.h" qui est inclus dans le fichier d'en-tête ci-dessus le fait fonctionner ...

Si cela ne suffit pas de me le faire savoir et je vais en tirer plus pour inclure.

+0

[Impossible de dupliquer] (http://ideone.com/pHxQxN). Recommander [mcve]. Incluez le texte du message d'erreur complet et verbatim. – user4581301

+1

Quel est le nom de "autre en-tête"? Celui qui a «tourné» dedans. – AnT

+0

C'est dans le fichier game.h. – windy401

Répondre

2

Vous avez une inclusion d'en-tête circulaire. game.h inclut commonincludes.h et commonincludes.h inclut game.h. Vos gardes d'inclusion brisent le cycle d'inclusion infini, mais ils le cassent au point où Player reste non déclaré au moment de la déclaration turn.

Si l'on en juge d'après ce que vous avez publié jusqu'à présent, vous n'avez pas besoin de #include "game.h" dans commonincludes.h. Qu'est-ce qu'il fait là?

P.S. Utilisez #include "..." pour inclure vos propres fichiers d'en-tête. La syntaxe #include <...> est pour les en-têtes standard.

+0

Hmm ok, je vois. Je pensais que je devrais appeler des fonctions que j'avais dans game.cpp à partir d'autres fichiers cpp, donc j'avais l'en-tête pour le jeu en commun, ce qui pourrait être l'une des choses auxquelles tout le monde avait accès. Mais en fait maintenant que j'y pense plus je n'aurai pas besoin de ça et je vois où c'est un problème maintenant. Je vous remercie. – windy401