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

  1. #1
    Futur Membre du Club
    Inscrit en
    avril 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Problème de compilation avec gcc sous code::blocks
    Bonjour, je suis nouveau sur le forum. Je ne savais pas trop où poster
    ce message: j'espère ne pas m'etre trompé de rubrique...

    J'ai un petit problème avec la classe singleton. Voici le code:


    ******************************************************

    //=========================================
    // Classe SINGLETON
    //=========================================


    #ifndef SINGLETON_H
    #define SINGLETON_H


    template <class T>
    class Singleton
    {

    public :

    static T& Instance() // Instanciation & accession de type reference
    {
    if (!m_Inst) m_Inst = new T;
    return *m_Inst;
    }

    static T* PtrInstance() // Instanciation & accession de type pointeur
    {
    if (!m_Inst) m_Inst = new T;
    return m_Inst;
    }

    static void Destroy() // Liberation des ressources
    {
    delete m_Inst;
    m_Inst = NULL;
    }

    protected :

    Singleton() {}

    ~Singleton() {}

    private :

    static T* m_Inst; // Instance de la classe

    Singleton ( Singleton & ) ; // Supression du constructeur de copie
    void operator = (Singleton &) ; // Supression de la copie
    };

    template<class T> T* Singleton<T>::m_Inst = NULL; // ce qui pose probleme

    #endif

    ***********************************************************

    Voila; ce code est sensé marcher puisque je l'ai déja utilisé à de
    tres nombreuses reprises pour dévellopper de petits programmes.

    Le hic, c'est que j'ai changer de compilateur pour pouvoir utiliser
    Ogre (un moteur 3D)

    en faisant un simple #include du code ci dessus j'ai le message d'erreur
    suivant:

    "error: expected initializer before '<' token"

    cette erreur ce ratache à la ligne de code:

    "template<class T> T* Singleton<T>::m_Inst = NULL;"


    Je ne sais pas trop comment faire pour régler ce problème;

    voici le compilo et l'EDI que j'emploi:

    Code::blocks Nightly build

    gcc core 3.4.5
    g++ 3.4.5


    En fait, c'est la configuration décrite dans le lien suivant
    http://www.ogre3d.org/wiki/index.php/CodeBlocks_MingW_STLPort



    merci d'avance pour vos réponses

    @+

  2. #2
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Sois le bienvenu!
    Le code serait plus lisible si tu ajoutais les balises Code.
    Alors voilà:
    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
     
    #include <iostream>
    #ifndef SINGLETON_H
    #define SINGLETON_H
     
     
    template <class T>
    class Singleton
    {
     
    public :
     
    static T& Instance() // Instanciation & accession de type reference
    {
    if (!m_Inst) m_Inst = new T;
    return *m_Inst;
    }
     
    static T* PtrInstance() // Instanciation & accession de type pointeur
    {
    if (!m_Inst) m_Inst = new T;
    return m_Inst;
    }
     
    static void Destroy() // Liberation des ressources
    {
    delete m_Inst;
    m_Inst = NULL;
    }
     
    protected :
     
    Singleton() {}
     
    ~Singleton() {}
     
    private :
     
    static T* m_Inst; // Instance de la classe
     
    Singleton ( Singleton & ) ; // Supression du constructeur de copie
    void operator = (Singleton &) ; // Supression de la copie
    };
     
    template<class T> T* Singleton<T>::m_Inst = NULL; // ce qui pose probleme
     
    #endif
    Sous Code::Blocks, ce fichier compile sans problème...
    A++

    PS: ton problème c'est que NULL n'est pas trouvé... Donc j'ai ajouté l'en-tête <iostream>

  3. #3
    Futur Membre du Club
    Inscrit en
    avril 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour ta réponse

    A l'avenir, je ferai attention pour les balises

    En fait, j'ai toujours le meme problème......

    J'ai crée un autre projet où je fait un simple include du
    header avec Singleton puis une "Singletonisation" (bon, c'est pas
    très francais comme terme) d'une classe quelconque et la ca
    marche .......

    bref mon impression c'est: ???????

    Je crois que le mieux c'est que je revoie ma facon de configurer
    le projet initial......

  4. #4
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    L'erreur c'est qu'il ne reconnaît pas NULL... es-tu sûr d'avoir inclus tous les headers dont tu as besoin?

  5. #5
    Futur Membre du Club
    Inscrit en
    avril 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je pense effectivement avoir inclut tous les headers;

    voici ce que j'ai testé

    Projet principal (celui qui utilise ogre)
    avec ou sans le header : "error: expected initializer before '<' token "
    avec "template<class T> T* Singleton<T>::m_Inst = 0;" meme probleme
    avec "#define NULL 0" tout en haut : meme probleme

    Projet test (une petit console simple)
    tous les tests précedents passent sans problemes

    PS: le compilo est réglé pareil c'est a dire avec les options (gcc)
    Produce debugging symbols (-g)
    Enable all compiler warning (-Wall)

    je pense que le problème doit venir du SDK ogre:
    Celui-ci doit procéder a des redéfinitions ou autre qui me sont cachées

  6. #6
    Futur Membre du Club
    Inscrit en
    avril 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    C'est bon j'ai régler le problème:
    Effectivement, c' est un coup du SDK de orgre car le problème est
    résolu simplement en changeant l'ordre des includes dans le main

    En fait c'est:
    #include mon_truc_a_moi.h
    #include ExempleApplication_de_Ogre.h

    et plus de problemes.

    En tout cas merci infiniment reggae pour ton aide

    @ bientot

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de compilation projet wxwidget sous Code::block
    Par Benoit_T dans le forum wxWidgets
    Réponses: 1
    Dernier message: 17/02/2011, 14h56
  2. [Débutant] Compiler glu.h sous Code::Blocks
    Par allanp8 dans le forum OpenGL
    Réponses: 10
    Dernier message: 18/11/2007, 00h56
  3. [Cal3D] Problème de compilation avec Cal3D sous windows
    Par nicoenz dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 15/11/2006, 09h46
  4. Problème pour compiler avec gcc
    Par Mick.Zen dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 28/06/2006, 14h05
  5. [débutant]compiler avec gcc sous linux
    Par Ickou dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/03/2006, 17h27

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