Variable dans l'en-tête d'un fichier non déclaré à la portée
Ok, je sais que certaines questions similaires ont probablement été mis sur ici avant, mais je ne pouvais pas trouver quelque chose à ce sujet n'importe où sur internet, donc je ne peux que supposer que c'est parce que je ne suis pas bon avec le C++ et j'ai fait quelque chose de mal sans s'en rendre compte.
Dans mon jeu que je suis en train de faire, j'ai ma main .fichier cpp qui inclut un en-tête de fichier (appelons-le A), qui comprend tous les autres fichiers d'en-tête (appelons-B). Dans l'un de ces B fichiers d'en-tête, j'ai inclus le fichier pour accéder à la programRunning
booléen qui est défini. Aucun des B fichiers d'en-tête, malgré, y compris le fichier qui définit la variable, semblent être en mesure de l'utiliser. Je suis vraiment confus par cela et voudrais vraiment l'apprécier un peu d'aide. Ci-dessous le code que j'ai utilisé:
pong_header.h (Un fichier d'en-tête comme décrit ci-dessus)
#ifndef PONG_HEADER_H
#define PONG_HEADER_H
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <stdio.h>
#include "pong_graphics.h"
#include "pong_core.h"
#include "pong_entity.h"
#include "pong_event.h"
bool programRunning;
#endif
pong_event.h (un des B fichiers d'en-tête)
#ifndef PONG_EVENT_H
#define PONG_EVENT_H
#include "pong_header.h"
void Pong_handleEvents(SDL_Event event)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
programRunning = true;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym):
case SDLK_ESCAPE:
programRunning = false;
break;
break;
default:
break;
}
Pong_handleEntityEvents(event)
}
}
Les autres B les fichiers d'accès programRunning
de la même manière.
L'erreur exacte de Code::Blocks me donne est comme suit
Pong\pong_event.h|20|error: 'programRunning' was not declared in this scope
Faire extern bool programRunning; et avez une source, aussi. (bool en cours d'exécution). N'oubliez pas de décorer avec l'import/export si c'est un dlll
OriginalL'auteur ftm500 | 2013-08-14
Vous devez vous connecter pour publier un commentaire.
Le problème est que
pong_header.h
comprendpong_event.h
avant il déclareprogramRunning
, de sorte que lorsquepong_event.h
essaie de l'inclurepong_event.h
, l'inclure des gardes de prévenir. La solution est de simplement déplacer lebool programRunning
déclaration au sommet depong_event.h
.Maintenant, il en résultera un autre problème - tous les
.cpp
fichier qui contient l'un de ces en-têtes reçoivent leur propre copie deprogramRunning
, ce qui va provoquer une erreur de lien (définition de plusieurs deprogramRunning
), ou il sera compiler, mais ne fonctionne pas comme vous le souhaitez.Ce que vous voulez faire est de le déclarer comme extern, c'est à dire
Puis, dans un de votre
.cpp
fichiers (de préférence selon leint main
), vous fait déclarer (c'est à dire sansextern
):OriginalL'auteur Drew McGowen