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 :

Initialisation variable membre static const double


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut Initialisation variable membre static const double
    Bonjour,

    J'ai un probl�me d'initialisation d'une variable membre de type static const double, mais uniquemment sous Windows (Visual Studio) et pas sous Linux/MacOSX.

    Si on a la classe suivante:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    class Foo
    {
      private:
        static const double forceMin = 100.0;
        static const double forceMax = 5000.0;
    };
    Sou Linux et MacOSX, aucun probl�me, alors que sous windows, �a ne compile pas et renvoie une erreur du style (j'ai plus le message exact):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    can't initialize non-integral static const membre
    Sous Linux et MacOSX je choisis mes options de compilation, sous windows/VisualStudio parcontre c'est tr�s obscure pour moi.

    J'ai pas compris le probl�me et pourquoi il apparait uniquement sous windows.

    Merci de votre aide.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Bonjour,

    Il me semble qu'il faut initialiser les static dans le .cpp :
    Code foo.h : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    class Foo
    {
      private:
        static const double forceMin;
        static const double forceMax;
    };

    Code foo.cpp : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    double Foo::forceMin = 100.0;
    double Foo::forceMax = 5000.0;

    EDIT : Apr�s une simple recherche :
    Citation Envoy� par http://stackoverflow.com/questions/9656941/why-i-cant-initialize-non-const-static-member-or-static-array-in-class
    The C++ standard allows only static constant integral or enumeration types to be initialized inside the class.

  3. #3
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    OK, c'est ce que j'ai cru comprendre aussi, mais pourquoi sous Linux et MacOSX je n'ai pas eu de probl�me alors que j'initialise dans le .h.

  4. #4
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    D�veloppeur C
    Inscrit en
    Ao�t 2004
    Messages
    2 366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur C

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 2 366
    Par d�faut
    En effet, j'ai l'erreur avec VS 2008.

    Pourtant en regardant la MSDN sur le code d'erreur C2864 Microsoft dit que �a devrait marcher. Ah non :

    Bon si tu remplaces double par int, �a marche. Il doit y avoir une restriction sur le type. Reste a savoir ce qu'est une donn�e "int�grale".

  5. #5
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    Citation Envoy� par fregolo52 Voir le message
    Bon si tu remplaces double par int, �a marche.
    Ah nan, �a �a va pas �tre possible.
    Citation Envoy� par fregolo52 Voir le message
    Il doit y avoir une restriction sur le type.
    Dans les options de compilation de visual studio? D'ailleurs j'aimerai bien les connaitres.

    Citation Envoy� par fregolo52 Voir le message
    Reste a savoir ce qu'est une donn�e "int�grale".
    C'est ce que je me demande �galement.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Citation Envoy� par fregolo52 Voir le message
    En effet, j'ai l'erreur avec VS 2008.

    Pourtant en regardant la MSDN sur le code d'erreur C2864 Microsoft dit que �a devrait marcher. Ah non :
    Il faudrait essayer avec mingw, il me semble que Microsoft avec Visual Studio ne voulait pas suivre enti�rement le C++11 (?)

    Citation Envoy� par fregolo52 Voir le message
    Bon si tu remplaces double par int, �a marche. Il doit y avoir une restriction sur le type. Reste a savoir ce qu'est une donn�e "int�grale".
    Une donn�e "int�grale", ce n'est pas un entier (int abr�viation de integer = int�grale) ?

  7. #7
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    Citation Envoy� par Neckara Voir le message
    Il faudrait essayer avec mingw, il me semble que Microsoft avec Visual Studio ne voulait pas suivre enti�rement le C++11 (?)
    J'avais pens� installer et tester avec Cygwin, parcontre je savais pas que visual studio ne suivait pas entierement C++11, merci pour l'info.
    Citation Envoy� par Neckara Voir le message
    Une donn�e "int�grale", ce n'est pas un entier (int abr�viation de integer = int�grale) ?
    C'est ce que je me disait, mais pourquoi pas mettre integer dans ce cas?
    A moins qu'il y ait juste une diff�rence subtile.

  8. #8
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    Citation Envoy� par Neckara Voir le message
    Code foo.cpp : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    double Foo::forceMin = 100.0;
    double Foo::forceMax = 5000.0;
    Oui c'est vrai, je n'avais pas vu.
    Mais de le .cpp, tu fais cette initialisation o�? Tout au d�but, en dehors de tout alors (comme une varible globale)?

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    C'est comme lorsque tu impl�mentes une m�thode de ta classe.

    Code .cpp : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Foo::Foo(void)
    {
    }
     
    bool Foo::fooo(void)
    {
          return m_fooo;
    }
     
    bool Foo::m_fooo = true;

  10. #10
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    D'accord, j'ai compris, je vais tester � pr�sent.

  11. #11
    Membre �clair� Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par d�faut
    Ca ne marche pas, le compilateur consid�re que dans le .cpp j'essaye de d�finir une seconde fois une varible qui existe d�j�:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ...has a previous declaration as...
    EDIT: en fait il fallait "r�p�ter" le mot clef const, et l� �a marche.
    Foo.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const double Foo::forceMin = 100.0;
    et non pas :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    double Foo::forceMin = 100.0;
    Dans ce cas, pourquoi �a r�le pas pour le mot clef static que je n'est pas "r�p�t�" ?

    Je rappelle le Foo.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    class Foo
    {
    private:
      static const double forceMin;
    };
    Petite question subsidiaire, comment pr�fixeriez-vous cette varible membre pour indiquer qu'il s'agit d'un static const?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    s_forceMin;
    s_constForceMin;
    ...

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

Discussions similaires

  1. Initialisation de membre static
    Par Derfh dans le forum C++
    R�ponses: 3
    Dernier message: 02/12/2014, 08h47
  2. Initialisation d'un membre static const
    Par la_urre dans le forum Langage
    R�ponses: 4
    Dernier message: 07/10/2010, 10h31
  3. [POO] D�finition des variables membre static
    Par Aur�lienB dans le forum Langage
    R�ponses: 13
    Dernier message: 18/02/2008, 11h39
  4. Initialisation de membres static const
    Par NiamorH dans le forum C++
    R�ponses: 16
    Dernier message: 14/01/2008, 16h50
  5. R�ponses: 2
    Dernier message: 30/10/2006, 16h40

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