Pages : 1
#1 Le 01/07/2013, à 11:22
- G.I.Bdeking
des éxternes et des multiples
Bonjour, aujourd'hui, un petit problème qui gâche un programme... Comme vous l'avez sans doutes remarqué, les multiples définition of sont mes pires ennemis, mais là pour le coup, j'ais saisi le problème. En fait, je voudrait déclarer un objet que toutes mes fonctions (dont le main, evidemment) peuvent utiliser. J'ais donc fait ça:
generalVar.hpp
#ifndef GENERALVAR_HPP_INCLUDED
#define GENERALVAR_HPP_INCLUDED
#include <iostream>
#include <cstdlib>
#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>
sf::RenderWindow fenetre(sf::VideoMode(800, 600, 32), "fenetre 25565");
#endif // GENERALVAR_HPP_INCLUDED
ce fichier est inclut dans une classe (un .h) et le main.
rien de plus normal donc mais j'ais cette erreur:
-------------- Build: Debug in TGui ---------------
Compiling: main.cpp
Linking console executable: bin/Debug/TGui
obj/Debug/chose.o: In function `__static_initialization_and_destruction_0':
./TGui/generalVar.hpp:9: multiple definition of `fenetre'
obj/Debug/TBouton.o:./TGui/TBouton.cpp:6: first defined here
obj/Debug/main.o: In function `main':
./TGui/main.cpp:7: multiple definition of `fenetre'
obj/Debug/TBouton.o:./TGui/TBouton.cpp:6: first defined here
collect2: ld a retourné 1 code d'état d'exécution
Process terminated with status 1 (0 minutes, 1 seconds)
4 errors, 0 warnings
merci pour vos réponses!
Ps: Je programme en C++ et je suis sous code::block
Dernière modification par G.I.Bdeking (Le 03/07/2013, à 17:35)
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#2 Le 02/07/2013, à 11:07
- G.I.Bdeking
Re : des éxternes et des multiples
Je ne pensait pas que mon problème était complexe...
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#3 Le 02/07/2013, à 12:29
- claudius01
Re : des éxternes et des multiples
Bonjour,
Allez, je me lance...
Ne manquerait-il pas une définition de prototypage des arguments de fenetre dans
extern sf::RenderWindow fenetre;
avec par exemple 'char *' en 2ème argument et ??? en 1er argument
Cordialement, A+
--
Claudius
Hors ligne
#4 Le 02/07/2013, à 13:25
- G.I.Bdeking
Re : des éxternes et des multiples
j'ais modifié mon premier message
Dernière modification par G.I.Bdeking (Le 03/07/2013, à 17:24)
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#5 Le 04/07/2013, à 00:02
- telliam
Re : des éxternes et des multiples
tu definis dans un hpp une variable, donc chaque .cpp qui inclus ce .hpp aura cette variable définie.
lors que les .o issus de ces .cpp seront linkés ensemble, il y aura donc plusieurs fois cette variable définie.
il faut que tu déclares cette variable extern dans le .hpp et que tu la déclares dans un seul .cpp
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#6 Le 06/07/2013, à 18:11
- G.I.Bdeking
Re : des éxternes et des multiples
ca marche pas ya que le cpp ou est défini fenetre qui peut l'utiliser... regardez comment est faite l'architecture du prog: https://docs.google.com/file/d/0B4449oU … sp=sharing
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#7 Le 08/07/2013, à 07:31
- telliam
Re : des éxternes et des multiples
C'est justement le but du mot clé 'extern'. Ca indique que la variable existe ailleurs dans un .cpp et qu'elle est utilisable. C'est une règle de base, on ne doit jamais déclarer de variables dans un .hpp, seulement des variables en extern
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#8 Le 08/07/2013, à 22:24
- G.I.Bdeking
Re : des éxternes et des multiples
En fait, tenant compte de l'image de la structure de mon programme envoyée dans mon dernier message (https://docs.google.com/file/d/0B4449oU … U0T0U/edit), je voudrais savoir dans quelle .cpp mettre ma définition pour que toutes les classes puissent l'utiliser.
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
#9 Le 09/07/2013, à 06:40
- telliam
Re : des éxternes et des multiples
Du moment que les cpp qui l'utilisent inclus le .hpp avec une déclaration externe, tu px le mette ou tu vx. Le main'cpp me parait un bon candidat
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#10 Le 15/07/2013, à 16:25
- G.I.Bdeking
Re : des éxternes et des multiples
Merci pour ta réponse, mais j'ais trouvé une façon bien plus belle de faire mon programme! C'était vraiment utile et la prochaine fois que j'aurais besoin de déclarer une variable globale (chose que je ferais de mon mieux pour éviter), je saurais comment faire!
PS: j'ais un autre problème, mais avec les tableaux "map" dans mon prochain topic
"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."
Hors ligne
Pages : 1