IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Variables globales statiques accessibles par plusieurs fichiers


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut Variables globales statiques accessibles par plusieurs fichiers
    Bonjour,

    Je programme un jeu d'échec qui devient de plus en plus volumineux, et je me suis dit qu'au lieu de passer un objet plateau par référence à 15 fonctions différentes dans quasiment autant de fichiers, il serait plus intéressant de le mettre dans une classe (un namespace? un fichier? bref je sais pas trop) spéciale "Global.h" qui contiendrait les variables utilisées par les fonctions éparpillées dans les fichiers.

    Jusque là pas de problème, j'ai réussi ^^ ..Mais chaque fonction qui utilise les variables globales s'en fait ses propres copies réinitialisées à zéro, ce qui n'est pas du tout le comportement souhaité :-/

    Finalement je suis tombé sur une solution qui règle ce dernier problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    #ifndef _Global
    #define _Global
     
    /* variables globales utiles en de nombreux endroits */
     
    #include "Coup.h"
    #include "Plateau.h"
    #include <vector>
     
    class Global {
     
    public:
     
       static Plateau plateau;
     
       static short posRoi; /* la position du roi, dependamment de la couleur */
     
       static std::vector<Coup> setCoups; /* l'ensemble des coups possibles */
     
    };
     
    Plateau Global::plateau=Plateau();
     
    short Global::posRoi=plateau.roiB;
     
    #endif
    Mais ainsi les variables semblent n'être utilisables que dans les headers: j'ai créé une classe bidon avec .h et .cpp (en plus du main.cpp, en supprimant tous les autres fichiers du projet) en faisant un #include "Global.h", et le compilateur me dit qu'il y a une définition multiple des variables plateau..etc lorsqu'elles sont utilisées dans le .cpp, alors qu'elles peuvent être utilisées dans le .h sans problèmes. J'utilise aussi ces variables dans main.cpp et bizarrement ça fonctionne.

    Que puis-je faire pour accéder et modifier ces variables dans un fichier .cpp?

    Merci d'avance,
    Benjamin.

  2. #2
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Salut,

    essaye de rajouter un #ifndef dans ton fichier .h afin qu'il ne soit pas inclu plusieurs fois.
    "Don't think you are, know you are..." (Morpheus)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    c'est déjà fait :-/ (cf mon code plus haut)

    L'erreur doit être plus subtile, hélas

  4. #4
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Euuhh c'est dans fichier cpp ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    short Global::posRoi=plateau.roiB;
    ?
    Tu redéclares la variable là non.
    "Don't think you are, know you are..." (Morpheus)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    hmm non c'est toujours le fichier .h, avant le #endif d'ailleurs.

    J'ai utilisé exactement la même structure que dans le livre "thinking in C++" dans l'exemple d'utilisation de variables de classe statiques, où ces dernières sont initialisées ainsi en dehors de la classe.

    Pourquoi ça marche chez lui et pas chez moi, je n'en sais rien.

    Tu as peut-être raison, mais alors que faire? Je ne vais pas écrire deux fois #ifndef au cas où le compilo, mal réveillé après une nuit difficile, ne verrait pas le premier ^^

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par Chewbi
    Mais chaque fonction qui utilise les variables globales s'en fait ses propres copies réinitialisées à zéro, ce qui n'est pas du tout le comportement souhaité :-/
    faudrait un exemple de fonctions dans un meme programme qui reinitialise les variables...


    Citation Envoyé par Chewbi
    Mais ainsi les variables semblent n'être utilisables que dans les headers: j'ai créé une classe bidon avec .h et .cpp (en plus du main.cpp, en supprimant tous les autres fichiers du projet) en faisant un #include "Global.h", et le compilateur me dit qu'il y a une définition multiple des variables plateau..etc lorsqu'elles sont utilisées dans le .cpp, alors qu'elles peuvent être utilisées dans le .h sans problèmes. J'utilise aussi ces variables dans main.cpp et bizarrement ça fonctionne.

    Que puis-je faire pour accéder et modifier ces variables dans un fichier .cpp?

    Merci d'avance,
    Benjamin.
    comment ca accessible seulement depuis le header, ca se compile pas?
    poste un exemple d'erreur de compilation

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    Bon, j'essayerai d'être plus clair tout à l'heure (je dois partir là).

    le compilo dit "variables déjà déclarées", mais je te donnerai le message précis si tu veux.

    Des exemples de fonctions aussi, mais bon.. je ne pense pas que ça aidera beaucoup (tu peux créer un fichier toto.cpp et toto.h, puis tester dans une fonction bidon qui affiche les variables, tu risques d'avoir le même problème que moi :-/)

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    L'initialisation des variables statiques non intégrales doit se faire dans le fichier .cpp.
    Dans ton cas ta variable intégrale dépend d'une autre, donc les deux doivent être dans le .cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Plateau Global::plateau;
    short Global::posRoi = Global::plateau.roiB;
    std::vector<Coup> Global::setCoups;
    Attention, on dit souvent qu'on ne connait pas l'ordre d'initialisations des variables statiques.
    Je ne suis donc pas certain que cela fonctionne, étant donné que Global::posRoi dépend de Global::plateau.

    Je doute néanmoins de la pertinence de ton design, moi j'aurais plutôt fait une instance globale de Global.
    Et puis je vois pas pourquoi la position du roi est dans Global.
    Boost ftw

  9. #9
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Effectivement dans le "thinking in C++" c'est ce qui est écrit.

    Et sinon j'ai essayé avec un projet vierge et chez moi un cas simple avec uniquement un short ca marche bien :

    Header1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    #ifndef _Global
    #define _Global
     
    /* variables globales utiles en de nombreux endroits */
     
    class Global {
     
    public:
       static short posRoi; /* la position du roi, dependamment de la couleur */
     
    };
     
    short Global::posRoi=2;
     
    #endif
    test.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include "stdafx.h"
    #include "test.h"
    #include "Header1.h"
    #include <iostream>
     
    using namespace std;
     
    test::test()
    {
       Global::posRoi=5;
    }
     
    void test::affiche()
    {
       cout << Global::posRoi;
    }
    test.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    #ifndef _test
    #define _test
     
    class test {
     
    public:
       test(); 
       void affiche();
    };
     
    #endif
    Et enfin le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "stdafx.h"
    #include "test.h"
     
    int _tmain(int argc, _TCHAR* argv[])
    {
       test t;
       t.affiche(); // 5
       getchar();
     
       return 0;
    }
    Donc faudrait peut être que tu nous montres un peu de code pour essayer de comprendre ce qui se passe chez toi.
    "Don't think you are, know you are..." (Morpheus)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    @ loufoque :
    la position du roi est utile pour tester le statut du roi, et ça m'évite ainsi de réallouer une case mémoire à chacun des 35623468 appels effectués ;-) J'envisage de stocker les positions des autres pièces aussi pour gagner une boucle.

    Sinon, pour l'ordre des variables et la définition dans le .cpp que tu mentionnes, le "thinking in C++" (encore lui ;o)) présente une classe similaire à Global avec deux variables x et y, y dépendant de x; peut-être cela dépend-il du compilateur alors?

    @neo :
    OK je regarde ton exemple et je vais essayer de calquer sur le mien pour voir ce qui cloche. Merci !

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    @ neo toujours :

    Ton programme fonctionne car tu n'inclue le .h qu'à un seul endroit et n'utilise les variables globales que dans un fichier (je viens de vérifier, malgré le #include "test.h", Global::posRoi n'est pas accessible depuis le main). Mon but étant de les utiliser dans plusieurs fichiers, j'ai essayé de faire un #include "Global.h" dans le main afin d'y utiliser posRoi, voici le résultat:

    test.o:(.data+0x0): définitions multiples de « Global::posRoi »
    main.o:(.data+0x0): défini pour la première fois ici

    Inutile donc de poster un bout de mon code, car.. c'est exactement mon problème ^^ Ceci dit j'ai le sentiment que la solution n'est pas bien compliquée, mais je la vois pas :-/ heeeeeeelp !

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    La solution, je te l'ai donnée.
    J'ai testé et cela fonctionne parfaitement.
    Boost ftw

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    @ loufoque :

    oui et non.
    Je n'ai pas testé l'initialisation dans un fichier Global.cpp, et ça fonctionnerait peut-être (j'en doute mais j'essayerai). En revanche en utilisant uniquement posRoi (short, donc type intégral), tu peux lire le problème ci-dessus :-/ ..et celui-ci tu ne l'as pas résolu ;-)

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    ça marche pas, loufoque :

    main.o : Dans la fonction "main":main.cpp:(.text+0x1f): référence indéfinie vers « Global::posRoi »
    test.o : Dans la fonction "test::test()":test.cpp:(.text+0x6): référence indéfinie vers « Global::posRoi »
    test.o : Dans la fonction "test::test()":test.cpp:(.text+0x14): référence indéfinie vers « Global::posRoi »
    test.o : Dans la fonction "test::affiche()":test.cpp:(.text+0x25): référence indéfinie vers « Global::posRoi »
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [main] Erreur 1

    voici mon code copié de celui de neo et s'inspirant de ce que tu m'as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    /* Global.h */
     
    #ifndef _Global
    #define _Global
     
    class Global {
     
    public:
     
       static short posRoi;
     
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    /* Global.cpp */
     
    #include "Global.h"
     
    short Global::posRoi=3;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    /* test.h */
     
    #ifndef _test
    #define _test
     
    class test {
     
    public:
     
       test();
       void affiche();
     
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    /* test.cpp */
     
    #include "test.h"
    #include "Global.h"
    #include <iostream>
     
    using namespace std;
     
    test::test() {
       Global::posRoi=5;
    }
     
    void test::affiche() {
       cout << Global::posRoi << endl;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    /* main.cpp */
     
    #include "Global.h"
    #include "test.h"
    #include <iostream>
     
    using namespace std;
     
    int main(int argc, char* argv[]) {
       Global::posRoi=2;
       test t;
       t.affiche();
     
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    /* Makefile */
     
    CXX=g++
    CXXFLAGS=-Wall
    LDFLAGS=-Wall
    EXEC=main
     
    all: $(EXEC)
     
    main: main.o test.o Global.o
            $(CXX) -o $@ $^ $(LDFLAGS)
     
    %.o: %.cpp
            $(CXX) -o $@ $^ $(CXXFLAGS)
     
    clean:
            rm -f *.o
            rm -f $(EXEC)
    peux-tu me donner ton code ?

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    avec quoi tu compiles?

    chez moi, ton code marche parfaitement


    EDIT: j'avais pas vu le make file, je regarde d'abord


    OK ton problème vient du makefile, tu compiles chaque programme tout seul.
    tu dois changer le Makefile en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CXX=g++
    CXXFLAGS=-Wall
    LDFLAGS=-Wall
    EXEC=main
     
    all: $(EXEC)
     
    main: main.o test.o Global.o
            $(CXX) -o $@ $^ $(LDFLAGS)
     
    %.o: %.cpp
            $(CXX) -c $^ $(CXXFLAGS)
     
    clean:
            rm -f *.o
            rm -f $(EXEC)

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    peux-tu me donner ton code ?
    Je n'ai bien sûr pas perdu mon temps à faire des fichiers multiples et un makefile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    #ifndef _Global
    #define _Global
     
    /* variables globales utiles en de nombreux endroits */
     
    struct Coup
    {
    };
     
    struct Plateau
    {
    	short roiB;
    	Plateau() : roiB(5)
    	{
    	}
    };
     
    #include <vector>
     
    class Global {
     
    public:
     
       static Plateau plateau;
     
       static short posRoi; /* la position du roi, dependamment de la couleur */
     
       static std::vector<Coup> setCoups; /* l'ensemble des coups possibles */
     
    };
     
    #endif
     
    #include <vector>
     
    Plateau Global::plateau;
    short Global::posRoi = Global::plateau.roiB;
    std::vector<Coup> setCoups;
     
    #include <iostream>
     
    int main()
    {
    	std::cout << Global::posRoi << std::endl;
    }
    Boost ftw

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    le problème vient du makefile, j'ai édité mon post d'avant

  18. #18
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Y'a pas des règles implicites pour les makefiles normalement ?
    Boost ftw

  19. #19
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par loufoque
    L'initialisation des variables statiques non intégrales doit se faire dans le fichier .cpp.
    En fait, dans tous les cas, la variable statique doit être définie en dehors de la classe, et dans un Cpp pour éviter les doublons, comme une définition classique. La seule différence avec les types entiers constants, c'est que la variable peut être initialisée dans la classe, mais elle doit quand même être définie en dehors.

    Citation Envoyé par loufoque
    Attention, on dit souvent qu'on ne connait pas l'ordre d'initialisations des variables statiques.
    Je ne suis donc pas certain que cela fonctionne, étant donné que Global::posRoi dépend de Global::plateau.
    On ne connais pas cet ordre quand les variables sont dans des unités de compilation différentes. A l'intérieur d'une même unité de compilation, l'ordre est connu, c'est celui des définitions, quand les objets ne sont pas initialisés avec des expressions constantes (ce qui est le cas ici). Donc, ici, pas de problèmes.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    EDIT: oops je répondais à coca25, pas vu la page 2. Je regarde !

    EDIT2: si tu passes par là coca25, je crois que tu t'es trompé de Makefile, c'est le mien que tu as donné ici. Si le problème vient de là et que tu peux me donner le bon Makefile ce serait génial :-)

    J'ai copié collé ton Makefile, ça marche pas mieux (même erreur) :-(

    Je commence à désespérer un peu :-/ Tu es sûr que tu as exactement le dernier code que j'ai écrit?

    Merci d'essayer :-)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme : Variables globales pas accessible
    Par ickylevel dans le forum Général Python
    Réponses: 7
    Dernier message: 09/08/2007, 21h26
  2. Réponses: 6
    Dernier message: 16/07/2007, 16h44
  3. Verrouillage d'un fifo accessible par plusieurs prog
    Par v4np13 dans le forum Réseau
    Réponses: 17
    Dernier message: 22/04/2007, 16h16
  4. Variable accessible par plusieurs clients
    Par mezoo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/10/2006, 10h08
  5. Réponses: 18
    Dernier message: 31/05/2006, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo