Partage
  • Partager sur Facebook
  • Partager sur Twitter

Deux problèmes

1-Utilisation d'une map 2- map définies 2 fois

    19 octobre 2007 à 3:23:20

    Alors voilà, j'ai deux problèmes que je n'arrive pas à comprendre malgré mes nombreuses recherches sur google.

    Le premier est que je n'arrive pas à définir un élément dans une map. o_O
    1. map<string,Weapon> WD;//WeaponDatabase
    2. //on déclare WD dans databases.h
    3. //pour qu'elle soit accessible dans tout le programme
    4. //---
    5. //on la remplit dans databases.cpp
    6. //c'est ca qu'il faut faire si j'ai bien compris
    7. WD["SteelSword_lvl_12"]=Weapon("Steel Sword",20);

    Et ca me donne cette erreur:
    databases.cpp:39: error: expected constructor, destructor, or type conversion before '=' token
    databases.cpp:39: error: expected `,' or `;' before '=' token

    Weapon(string,int) est bel et bien un constructeur :colere2: .
    1. class Weapon
    2. {
    3.     public:
    4.     Weapon();
    5.     Weapon(string,int);
    6.     void set_name(string);
    7.     void set_damage(int);
    8.     string name;
    9.     int damage;
    10. };



    Mon deuxième problème est le suivant.
    Dans un autre fichier, types_primary.cpp, je fait un include "databases.h".
    Or dans le linking il link types_primary.cpp d'abord puis databases.cpp après. :(
    ca me donne l'erreur suivante:
    .objs\databases.o:databases.cpp:(.bss+0x0): multiple definition of `WD'
    .objs\types_primary.o:types_primary.cpp:(.bss+0x0): first defined here


    pourtant j'ai bien mis:
    1. #ifndef DATABASES
    2. #define DATABASES
    3. //code...
    4. #endif

    Alors la... :-°
    Merci d'avance pour votre aide :)
    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2007 à 9:54:20

      Tu as mis bien ton insertion dans une fonction ?
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        19 octobre 2007 à 10:03:33

        Je ne reproduis pas ton erreur : chez moi tout compile (Visual C++ 2005)

        1. #include <map>
        2. #include <string>
        3. using namespace std;
        4. class Weapon
        5. {
        6.     public:
        7.                 Weapon(){}
        8.                 Weapon(string,int){}
        9.                 void set_name(string){}
        10.                 void set_damage(int){}
        11.     string name;
        12.     int damage;
        13. };
        14. int main()
        15. {
        16.         map<string,Weapon> WD;//WeaponDatabase
        17.         WD["SteelSword_lvl_12"]=Weapon("Steel Sword",20);
        18.         return 0;
        19. }


        Sans probleme également avec g++ sous Linux :
        g++ -o testmap testmap.cpp
        • Partager sur Facebook
        • Partager sur Twitter

        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

          19 octobre 2007 à 23:48:32

          bizarre...
          bon le problème de la déclaration de la map s'est auto-règlé... j'ai réecrit le code.

          Mais j'ai toujours cette erreure:
          .objs\databases.o:databases.cpp:(.bss+0x0): multiple definition of `WD'
          .objs\types_primary.o:types_primary.cpp:(.bss+0x0): first defined here


          Je ne fait que deux includes de "databases.h", dans databases.cpp et types_primary.cpp.
          j'ai souvent eu ce problème et il était du aux oubli de #ifndef blabla... #define blabla...
          pourtant ils sont la.
          • Partager sur Facebook
          • Partager sur Twitter
            20 octobre 2007 à 0:16:12

            variable globale -> faq developpez -> extern
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
              20 octobre 2007 à 1:32:56

              Peux tu préciser ce dont tu parles? ou donner un lien sur developez.com?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                20 octobre 2007 à 2:00:28

                Dans sa signature : FAQ C++ (developpez) et un peu de recherche ...
                • Partager sur Facebook
                • Partager sur Twitter
                  20 octobre 2007 à 4:30:15

                  Je comprends mon erreur, mais je ne vois pas comment la regler pour que WD soit disponible dans tous mes fichiers.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 octobre 2007 à 10:51:17

                    c'est que tu as pas lu le lien qu'on t'a proposé...

                    Il te suffit de déclarer un

                    extern map<string,Weapon> WD;

                    dans tous tes fichiers ou tu utilises cette variable globale (beurk).

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                      20 octobre 2007 à 18:01:49

                      extern ne m'avance pas ca plant quand meme.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        20 octobre 2007 à 18:13:54

                        Utilise le namespace globale pour déclarer ta variable (dans un header que tu inclus dans tous les fichier ayant besoin de cette variable), et initialise la une fois. (Cf FAQ C++ developpez -> namespace anonyme.)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Deux problèmes

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown