Partage
  • Partager sur Facebook
  • Partager sur Twitter

un probleme rageant,inexpliquable

le pied quois (une erreur de linkage...)

Sujet résolu
    27 juillet 2007 à 22:27:42

    je vais faire cour

    ma class dans un point h colisionSDL.h


    #include <SDL/SDL.h>//pour SDL_Surface
    class colision
    {
    static SDL_Surface *m_ecran;
    public:
    colision();
    };


    le.cpp
    colision::colision()
    {m_ecran=NULL;}


    [Linker error] undefined reference to `colision::m_ecran' 


    je ne vois aucune erreur (cela doit provenir de "static"...)

    ^^ merci pour m'aider à eclaircir ce probleme :D
    • Partager sur Facebook
    • Partager sur Twitter
      27 juillet 2007 à 22:34:26

      Tu dois instancier l'élément statique toi-même, en dehors de toute fonction
      • Partager sur Facebook
      • Partager sur Twitter
        28 juillet 2007 à 11:11:40

        Donc je doit l'instancier dans ma class ?

        le constructeur ne sert donc a rien?
        comment initialiser un membre statique si on ne peut pas recourir au constructeur?
        • Partager sur Facebook
        • Partager sur Twitter
          28 juillet 2007 à 12:12:48

          Hello,

          Alors déjà quelques précisions sur les attributs statiques.

          1) Ils sont partagés par toutes les classes.
          2) Ils existent même si aucune instance de la classe est créée.
          3) Ils sont initialisés AVANT le main (comme les variables globales en fait.

          Pour les initialiser le mieux c'est de le faire dans le .cpp de la manière suivante:

          collision:: m_ecran = 0;


          Ce qui initialise la variable. Comme c'est un pointeur, on l'initialise à 0.
          Ensuite dans n'importe quelle méthode (par exemple le constructeur de l'instance), tu pourras faire:

          m_ecran = new blabla;

          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            28 juillet 2007 à 14:13:53

            ca 'ai déja éssayé
            1) il n'y a plus le probleme de likage
            2) il y a d'autres probleme

            .h(pas de changement)
            #include <SDL/SDL.h>//pour SDL_Surface
            class colision
            {
            static SDL_Surface *m_ecran;
            public:
            colision();
            };


            le .cpp

            colision::m_ecran=0;//j'aurais mis NULL mais ca revien au meme
            colision::colision()
            {}


            expected constructor, destructor, or type conversion before '=' token
            expected `,' or `;' before '=' token  


            je ne sais pas si j'ai fait un pas en avant ou en arriere... o_O

            • Partager sur Facebook
            • Partager sur Twitter
              28 juillet 2007 à 14:20:03

              je crois qu'il faut aussi mettre le type de la variable devant l'initialisation.
              • Partager sur Facebook
              • Partager sur Twitter
                28 juillet 2007 à 14:28:03

                EDIT oui ca marche ^^ merci à vous trois
                (initialiser une variable sans fonction ca fait tout bisard :lol: )
                • Partager sur Facebook
                • Partager sur Twitter
                  28 juillet 2007 à 14:31:13

                  En effet ce que ALtic dit est juste, il faut mettre le type de la variable devant l'initialisation dans le .cpp

                  SDL_Surface* collision:: m_ecran = 0;


                  J'avais oublié de le mettre dans mon exemple au-dessus.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.

                  un probleme rageant,inexpliquable

                  × 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