2017-09-14 7 views
0

Je fais du jeu en C++. J'utilise SFML. J'ai des fichiers game.h et game.cpp qui sont connectés et partagent/utilisent des variables.Comment utiliser 1 variable dans tous les autres fichiers

Je souhaite utiliser certaines de ces variables dans d'autres fichiers. J'ai essayé l'exemple:

extern int variable; 

Et il fonctionne bien. Le problème est quand j'essaie de faire ce extern:

sf::Texture hoverTexture; 
std::vector<sf::Sprite> Hover_Tiles; 
sf::Sprite hover; 

Et utiliser ces sprites/textures dans un autre fichier cpp. Juste essayer de casser mon code en quelques fichiers pour le rendre plus facile à lire. Donc ma question serait de faire en sorte que les sprites/textures mentionnées soient globales pour les utiliser correctement dans d'autres fichiers. Quelle est la meilleure façon de le faire. Si ce n'est pas possible, que dois-je faire et comment?

Comment utiliser ces sprites/textures dans d'autres fichiers. Comment les connecter? Au moins pointez-moi quelque part. Merci.

Edit:

Après tout comprend au-dessus de game.h

extern std::vector<sf::Sprite> Tiles; 
extern sf::Sprite tile; 

extern sf::Texture seaTexture; 
extern sf::Texture grassTexture; 
extern sf::Texture rockTexture; 
extern sf::Texture forestTexture; 

extern sf::Texture hoverTexture; 
extern std::vector<sf::Sprite> Hover_Tiles; 
extern sf::Sprite hover; 

extern sf::Texture hoverTexture2; 
extern std::vector<sf::Sprite> Hover_Tiles2; 
extern sf::Sprite hover2; 

extern sf::Texture houseTexture; 
extern std::vector<sf::Sprite> House_Tiles; 
extern sf::Sprite house; 

extern int map[20][10]; 

Dans un autre fichier map.cpp

#include "game.h" 
#include "map.h" 

#include "SFML\Graphics.hpp" 
#include <vector> 

std::vector<sf::Sprite> Tiles; 
sf::Sprite tile; 

sf::Texture seaTexture; 
sf::Texture grassTexture; 
sf::Texture rockTexture; 
sf::Texture forestTexture; 

sf::Texture hoverTexture; 
std::vector<sf::Sprite> Hover_Tiles; 
sf::Sprite hover; 

sf::Texture hoverTexture2; 
std::vector<sf::Sprite> Hover_Tiles2; 
sf::Sprite hover2; 

sf::Texture houseTexture; 
std::vector<sf::Sprite> House_Tiles; 
sf::Sprite house; 


int map[20][10] = 
{ 
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } 
}; 

Dans le même map.cpp je transgressent fonction qui est d'abord définie dans map.h. Cette fonction contient du code qui fonctionne très bien dans game.cpp (si ce code que j'ai posté est dans game.h). J'ai aussi problème avec exception jeté:

Exception thrown at 0x7749B2E3 (ntdll.dll) in App.exe: 0xC0000005: 
Access violation writing location 0x00000004. 

À la ligne de map.cpp:

sf::Texture seaTexture; 

J'espère que ce code, j'aide à posté problème de fixation. Quand je transfère ces sprites/textures/variables dans un autre fichier en utilisant extern cela ne marchera pas mais tout en un (game.h et game.cpp) fonctionne très bien.

+1

est recommandé d'ajouter des messages d'erreur, les avertissements et les comportements observés de ce qui se passe (en supposant que le programme construit, bien sûr) lorsque vous exécutez la programme. Sinon, nous arrivons à peu près à l'aveuglette. Recommande également de créer un [mcve]. Ils sont presque toujours très utiles pour identifier un problème. – user4581301

+1

À mon avis, le meilleur moyen serait de ne pas utiliser de variables globales. Passer les paramètres. –

+0

@ArtemyVysotsky Pouvez-vous me donner un exemple? – Sadin97

Répondre

0

Vous devez inclure l'en-tête lib avant de déclarer la variable externe. Sinon, le compilateur n'a aucune idée de ce qu'est la classe.

otherfile.h

#ifndef OF_H_ 
#define OF_H_ 

#include <Texture.hpp> 
#include <Sprite.hpp> 
#include <vector> 

extern sf::Texture hoverTexture; 
extern std::vector<sf::Sprite> Hover_Tiles; 
extern sf::Sprite hover; 

#endif 

game.cpp

#include <game.h> 

sf::Texture hoverTexture; 
std::vector<sf::Sprite> Hover_Tiles; 
sf::Sprite hover; 
+0

J'ai inclus l'en-tête lib avant de déclarer la variable externe. Je comprends que. J'ai édité mon premier article et ajouté du code pour vous aider à mieux comprendre la question. – Sadin97