Je fais une partie. J'ai deux fichiers source, game.cpp et renduhandler.cpp. J'ai un fichier d'en-tête, gamestate.h. Le fichier gamestate.h contient une instance statique d'une énumération qui représente les différents états de jeu.
Je souhaite partager cette variable statique avec les deux fichiers source. Je ne veux pas deux variables distinctes dans chaque fichier source. Si je modifie la valeur de la variable d'état du jeu, je souhaite que cela soit transféré dans l'autre fichier source. P>
gamestate.h p> jeu.cpp Comment puis-je partager une instance statique d'une énumération entre deux fichiers source? Est-ce que mon logique ne va pas et dois-je pas utiliser des en-têtes et des énumérations de cette façon? P> P>#include "../inc/gameState.h"
void RenderHandler::render()
{
if (gameState == State::start) {
// code
}
else if (gameState == State::play) {
// code
}
else if (gameState == State::stop) {
// code
}
}
La valeur de gamestate est modifiée dans le fichier game.cpp. Mais cela n'affecte pas la valeur du gamestate dans Renderhandlerler.cpp, il est par défaut à 0, ce que je ne veux pas. Le changement de valeur se produit avant l'exécution du code de rendu. P>
3 Réponses :
Ne partagez pas les valeurs globales directement comme celle-ci. Vous pouvez courir dans FIASCO d'initialisation statique, qui est vraiment difficile à Détecter.
Utilisez une fonction à la place: p>
#include "../inc/gameState.h"
void RenderHandler::render()
{
if (gameState() == State::start) {
// code
}
else if (gameState() == State::play) {
// code
}
else if (gameState() == State::stop) {
// code
}
}
OMG Est-ce que cela fonctionne vraiment? Je vais essayer cela mais je pense que c'est incroyable, merci
Votre logique est fausse, si vous déclarez une variable statique dans un fichier d'en-tête et l'inclure à partir de deux fichiers C ++ différents, alors ce que vous obtenez est deux instances d'une variable statique avec le même nom mais n'utilisant pas la même adresse mémoire. . p>
Pour utiliser une instance, vous devez soit utiliser une variable globale (mauvais, car il rend le code difficile à entretenir), utilisez un singleton (mieux, mais doit toujours être évité car il est également difficile de maintenir ), ou simplement créer une instance de cette variable d'état au début de votre programme, puis en lui donnez une référence dans les classes en l'utilisant dans leurs constructeurs. P>
"statique" n'a aucune signification sur les variables globales. Vous devez marquer la variable globale comme "externe" et ajouter son initialisation à gamestate.cpp p>
en-tête: Etat externe GameState; P>
CPP:
État gamestate = et ajouter ce CPP à la compilation de votre projet. P>
Remarque: il fonctionnera comme prévu uniquement dans le même module, si vous ajoutez gamestate.cpp à un autre module, il créera une nouvelle variable globale locale pour le module. P>
Pourquoi faites-vous cela
statique code>? N'est-ce pas le but destatique code> de le rendre local à un seul fichier?