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 :

membre static du type vecteur


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Par défaut membre static du type vecteur
    Bonjour a tous,

    je trouve pas d'aide a mon proble de membre static de type vecteur de double, le compilateur me renvoi cette erreur:

    error C2143: syntax error : missing ';' before '<'

    et le code est le suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Call:public PayOff
    {
    private:
    	double K;
    
    public:
    	Call(double Ki=100);
    	double operator()(double) const;    
    	double getStrike() const;
    	static vector<double> m_vdDummy;
    	static unsigned m_uDummy;
    };
    Pourquoi ca marche bien pour un unsigned mais pas pour un vecteur??

    merci.

  2. #2
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Chez moi (Linux, distribution Ubuntu, compilateur g++), le programme suivant ne présente aucune erreur de compilation ou à l'exécution :

    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
     
    #include <vector>
     
     using namespace std;
     
     class PayOff
     {
     };
     
     class Call : public PayOff
     {
       private:
         double K;
     
       public:
         Call(double Ki=100);
         double operator()(double) const;    
         double getStrike() const;
         static vector<double> m_vdDummy;
         static unsigned m_uDummy;
     };
     
    int main()
    {
     
    }
    As-tu bien pensé à inclure <vector> ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Par défaut
    effectivement je me suis rendu compte que dans le code original, je devais mettre l'espace std:: avant le type double pour solucioner mon probleme.

    Merci quand meme de l'aide.

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    t'a fait std::double ????

  5. #5
    Invité
    Invité(e)
    Par défaut
    std::vector plutôt, non?

    Le message
    error C2143: syntax error : missing ';' before '<'

    indique que dans la ligne
    static vector<double> m_vdDummy;

    le compilateur a bien lu
    static vector

    mais ne reconnait pas vector comme un mot clef, mais comme le nom d'une variable (static sans type mentionné, soit int, je crois...). Il attend donc à ce stade un point virgule, une initialisation, des parenthèses indiquant que "vector" est une fonction, des crochets indiquant un tableau..., mais pas un '<'...

    Francois

  6. #6
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Oui c'est bien ce qu'y m'étonnais x).

  7. #7
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Par défaut
    En fait, la probleme dans l'exemple est bien l'oublie du include, mais moi dans mon vrai code, le probleme venait du st:: que j'avais oublie avant vector (et non avant double bien sur).

    Merci pour les details ceci dit.

  8. #8
    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,

    Tout le problème vient en réalité du fait que les classes fournies par le standard sont dans l'espace de noms std, et que, sauf indication contraire, le compilateur ne cherche les identifiants que dans l'espace de noms globlal...

    Comme, en partant de l'espace de noms globlal il ne trouve pas de déclaration correcte de vector, il se plaint en indiquant qu'il lui faut quelque chose avant '<' (qu'il connait )

    Par contre, il faut avouer que le message n'est pas vraiment explicite

    En outre, et au passage, il est fortement déconseillé de placer un dans un fichier d'en-tête

    En effet, le propre d'un fichier d'en-tête est d'être susceptible d'être inclus dans n'importe quel autre fichier, avec comme conséquence le fait que cette directive soit répercutée dans l'ensemble des fichiers dans lequel ton fichier d'en-tête sera inclus, de manière directe ou indirecte.

    Or, si pour une raison ou une autre, tu en viens à déclarer une autre structure nommée vector dans l'espace de noms global, le compilateur ne saura plus faire la différence entre ta propre structure vector et la classe std::vector, ce qui le mènera à se plaindre du fait de l'ambigüité du terme.

    Et comme cela peut arriver dans un fichier qui inclut un fichier qui inclut un fichier qui inclut... (on pourrait continuer longtemps comme cela) le fichier dans lequel apparait la directive, tu risque d'avoir d'énormes problèmes pour la retrouver
    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

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/01/2006, 21h26
  2. Réponses: 3
    Dernier message: 28/11/2005, 12h15
  3. Initialisation d'un menbre static de type CMap
    Par vanitom dans le forum MFC
    Réponses: 3
    Dernier message: 11/10/2005, 13h53
  4. [Debutant] Problème avec des membres static
    Par Mathieu.J dans le forum Débuter
    Réponses: 4
    Dernier message: 24/08/2005, 17h09
  5. pointeur membre static de classe
    Par Ca$ul dans le forum C++
    Réponses: 3
    Dernier message: 26/08/2004, 13h02

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