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 :

undefined reference avec mingw


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 136
    Par d�faut undefined reference avec mingw
    Bonjour,

    J'ai un petit probl�me de compilation:

    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
    Project   : OpenGL Application
    Compiler  : MinGW (called directly)
    Directory : F:\Programmation\Olala project\
    --------------------------------------------------------------------------------
    Switching to target: default
    Linking executable: OlalaProject.exe
    .objs\important.o:important.cpp:(.text+0x1a3): undefined reference to `actualisation::instance'
    .objs\important.o:important.cpp:(.text+0x20a): undefined reference to `actualisation::instance'
    .objs\important.o:important.cpp:(.text+0x2c9): undefined reference to `actualisation::instance'
    .objs\important.o:important.cpp:(.text+0x330): undefined reference to `actualisation::instance'
    .objs\important.o:important.cpp:(.text+0x335): undefined reference to `actualisation::instance'
    .objs\important.o:important.cpp:(.text+0x35a): more undefined references to `actualisation::instance' follow
    .objs\important.o:important.cpp:(.text+0x40b): undefined reference to `ecran::instance'
    .objs\important.o:important.cpp:(.text+0x480): undefined reference to `ecran::instance'
    .objs\important.o:important.cpp:(.text+0x4c8): undefined reference to `ecran::instance'
    .objs\important.o:important.cpp:(.text+0x4d6): undefined reference to `ecran::instance'
    .objs\important.o:important.cpp:(.text+0x4de): undefined reference to `ecran::instance'
    .objs\important.o:important.cpp:(.text+0x503): more undefined references to `ecran::instance' follow
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 1 seconds)
    0 errors, 0 warnings
    Bref c'est tr�s joyeux. Voici le code qui va avec, d'abord important.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
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #ifndef IMPORTANT
    #define IMPORTANT
     
     
    #include <iostream>
    #include <string>
    #include <time.h>
    #include <windows.h>
    #include <GL/glut.h>
     
    #define MENU 0
    #define JEU 1
     
    #define SON 0
    #define RESEAU 1
     
    class dessin
    {
     
    };
     
     
    class actualisation //singleton
    {
        public:
        void lancer();
        static void creer();
        void setRefresh_ms(int x);
        int getRefresh_ms();
        void setRefresh_rate(int x);
        int getRefresh_rate();
        static actualisation* getInstance();
        static void deleteInstance();
     
        protected:
        actualisation();
        ~actualisation();
     
        private:
        int refresh_ms;
        int refresh_rate;
        static actualisation* instance;
    };
     
    //actualisation* actualisation::instance = NULL;
     
     
    class ecran //singleton
    {
        public:
        void actualiser();
        static void creer(int x, int y);
        void setLargeurHauteur(int x, int y);
        int getLargeur();
        int getHauteur();
        static ecran* getInstance();
        void deleteInstance();
     
        protected:
        ecran();
        ecran(long x, long y);
        ~ecran();
     
        private:
        static ecran* instance;
        int largeur;
        int hauteur;
    };
     
    //ecran* ecran::instance = NULL;
     
    void setLargeurHauteur(int x, int y);
    void lancer_actualisation();
    Puis important.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
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    #include "important.h"
     
    void actualisation::lancer(void){}
     
    void actualisation::creer(void)
    {
        if(instance == NULL)
            {
                instance = new actualisation;
            }
    }
     
    void actualisation::setRefresh_ms(int x)
    {
        refresh_ms = x;
        refresh_rate = 1000/refresh_ms;
    }
     
    int actualisation::getRefresh_ms(void)
    {
        return refresh_ms;
    }
     
    void actualisation::setRefresh_rate(int x)
    {
        refresh_rate = x;
        refresh_ms = 1000/refresh_rate;
    }
     
    int actualisation::getRefresh_rate(void)
    {
        return refresh_rate;
    }
     
    actualisation* actualisation::getInstance(void)
    {
        if(instance == NULL)
        {
            instance = new actualisation();
        }
     
        return instance;
    }
     
    void actualisation::deleteInstance(void)
    {
        if(instance != NULL)
        {
            delete instance;
            instance = NULL;
        }
    }
     
    actualisation::actualisation(void)
    {
        refresh_ms = 20;
        refresh_rate = 50;
     
     
    }
     
    actualisation::~actualisation(void){}
     
    void ecran::actualiser(void)
    {
     
    }
     
    void ecran::creer(int x, int y)
    {
        if(instance == NULL)
        {
            instance = new ecran(x,y);
        }
    }
     
    void ecran::setLargeurHauteur(int x, int y)
    {
        largeur = x;
        hauteur = y;
    }
     
    int ecran::getLargeur()
    {
        return largeur;
    }
     
    int ecran::getHauteur()
    {
        return hauteur;
    }
     
    ecran* ecran::getInstance()
    {
        return instance;
    }
     
    void ecran::deleteInstance()
    {
        if(instance != NULL)
        {
            delete instance;
            instance = NULL;
        }
    }
     
    ecran::ecran(){}
     
    ecran::ecran(long x, long y): largeur(x), hauteur(y){}
     
    ecran::~ecran(){}
     
    void setLargeurHauteur(int x, int y)
    {
        static ecran* instance = ecran::getInstance();
        instance->setLargeurHauteur(x,y);
    }
     
    void lancer_actualisation(void)
    {
        static actualisation* pointeur = actualisation::getInstance();
        pointeur->lancer();
    }
    J'utilise pour compiler MinGW (derni�re version ou presque) et Code::Blocks (pareil) pour �crire le code.

    Pour r�pondre rapidement au critiques, oui je suis un boulet mais je sais lire la doc! Juste que je sais pas la comprendre:

    http://www.mingw.org/MinGWiki/index....inedReferences

    Je ne sais m�me pas si �a traite bien de mon probl�me... Pour ce qui concerne le code, ce sont des classes (pas finies d'ailleurs, certaines fonctions sont encore vides �galement) Singleton (du moins j'ai essayer de les faire comme �a). D'ailleurs justement le probl�me vient de ces pointeurs pour stocker l'instance (pointer serait plus correct mais bon). Pour info vite fait, ce code a pour but d'�tre lanc� par GLUT automatiquement (callback) qui ne veut pas de fonctions dans une classe en argument et donc j'ai fait des fonctions qui ne font que rappeller les bonnes fonctions dans les classes.

    Merci d'avance si vous savez ce que je dois faire (ou plut�t ne pas faire pour �viter des erreurs comme l�).

  2. #2
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    ben c'est evidant
    Tu doit d�clarer les variables static de tes class dans le .cpp

    il faut que tu ajoute en d�but du .cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    actualisation* actualisation::instance =0;
    ecran* ecran::instance =0;
    C'est une erreur classique quand on met des variables static dans une class

  3. #3
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    http://cpp.developpez.com/faq/cpp/?p..._static_erreur ?

    Edit: Mince, le temps de chercher le lien et je me fais griller...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Citation Envoy� par M�dinoc Voir le message
    http://cpp.developpez.com/faq/cpp/?p..._static_erreur ?

    Edit: Mince, le temps de chercher le lien et je me fais griller...

    sauf que je ne savait pas que c'�tait dans la FAQ

  5. #5
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Le probl�me vient surement du fait que tu as, tout simplement, oubli� d'initialiser ta variable statique...

    Je crois que le simple fait de suivre ce qui est �crit dans cette entr�e de la FAQ(et suivantes) devrait r�soudre ton probl�me.

    Sois attentif au fait que tu as deux s�ries d'erreurs de r�f�rence non d�finies, et que chacune d'elle traite d'une variable statique particuli�re

    Il faut donc suivre ce qui est indiqu� dans l'entr�e de la FAQ pour:
    • la variable statique instance de la classe actualisation
    • la variable statique instance de la classe ecran

    [EDIT]Et moi, je me fais griller � vouloir fournir une r�ponse trop complete... comme d'hab
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    136
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 136
    Par d�faut
    En tout cas merci beaucoup. Je chercherais mieux dans la doc maintenant :p.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. "Undefined reference" avec Ubuntu 12.04
    Par morbli dans le forum Ubuntu
    R�ponses: 2
    Dernier message: 02/11/2012, 12h55
  2. Undefined reference avec les fonctions d'une class
    Par romnair dans le forum D�buter
    R�ponses: 5
    Dernier message: 10/04/2012, 16h40
  3. probl�me d'undefined reference avec codeblocks
    Par matstriker dans le forum C
    R�ponses: 4
    Dernier message: 20/04/2011, 13h26
  4. Static const (undefined reference avec g++)
    Par _skip dans le forum D�buter
    R�ponses: 3
    Dernier message: 21/10/2009, 11h15
  5. Undefined reference avec code blocks
    Par Airlink dans le forum D�buter
    R�ponses: 1
    Dernier message: 14/06/2008, 19h40

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