Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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