Je développe un jeu. J'ai un en-tête GameSystem
(juste des méthodes comme la boucle de jeu, pas de classe) avec deux variables:
int mouseX
et int mouseY
. Ceux-ci sont mis à jour dans ma boucle de jeu. Maintenant, je veux y accéder à partir du fichier Game.cpp
(une classe construite par un fichier d'en-tête et le fichier source). Donc, je #include "GameSystem.h"
en Game.h
. Après cela, je reçois beaucoup d'erreurs de compilation. Quand je retire include dit-il bien sûr:C++: Peut-être connaissez-vous cet écueil?
Game.cpp:33: error: ‘mouseX’ was not declared in this scope
Game.cpp:34: error: ‘mouseY’ was not declared in this scope
Là où je veux accéder mouseX
et mouseY
.
Tous mes fichiers .h
ont des gardes d'en-tête, générés par Eclipse.
J'utilise SDL et si je supprime les lignes qui veulent accéder aux variables, tout compile et fonctionne parfaitement (*).
J'espère que vous pouvez me aider ...
Ceci est l'erreur-log quand je #include "GameSystem.h"
(Tout le code est-il à des œuvres référait, comme expliqué par le (*)):
In file included from ../trunk/source/domein/Game.h:14, from ../trunk/source/domein/Game.cpp:8: ../trunk/source/domein/GameSystem.h:30: error: expected constructor, destructor, or type conversion before ‘*’ token ../trunk/source/domein/GameSystem.h:46: error: variable or field ‘InitGame’ declared void ../trunk/source/domein/GameSystem.h:46: error: ‘Game’ was not declared in this scope ../trunk/source/domein/GameSystem.h:46: error: ‘g’ was not declared in this scope ../trunk/source/domein/GameSystem.h:46: error: expected primary-expression before ‘char’ ../trunk/source/domein/GameSystem.h:46: error: expected primary-expression before ‘bool’ ../trunk/source/domein/FPS.h:46: warning: ‘void FPS_SleepMilliseconds(int)’ defined but not used
Ceci est le code qui tentent d'accéder aux deux variables:
SDL_Rect pointer;
pointer.x = mouseX;
pointer.y = mouseY;
pointer.w = 3;
pointer.h = 3;
SDL_FillRect(buffer, &pointer, 0xFF0000);
Le code indiquant les déclarations pertinentes serait utile, en particulier les lignes spécifiées dans le message d'erreur. – Cogwheel
Vous devez probablement afficher le code en question (GameSystem.h). Les erreurs que vous montrez * sonnent * comme quelque chose de fondamental, comme un point-virgule manquant, mais sans voir le code, c'est terriblement difficile à deviner. –
En général, les en-têtes sont pour les déclarations qui seront partagées et les corps pour les définitions. L'inclusion de corps dans les en-têtes est généralement évitée car, en utilisant plusieurs fois les en-têtes, vous ne voulez pas que plusieurs définitions des mêmes variables/fonctions soient compilées. Inline et le modèle sont quelques-unes des exceptions. –