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

Langage C++ Discussion :

Problèmes pour redimensionner un vecteur membre statique


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Problèmes pour redimensionner un vecteur membre statique
    Hello,

    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    A
    {
        static vector<int> pouet;
    };
     
    B
    {
        void maFonction()
        {
            A::pouet.resize(5);
        }
    };
    Si tout ça se retrouve dans une bibliothèque .so, je n'arrive pas à charger ladite bibliothèque à cause du resize(). Une idée ?

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Bon, en fait, il fallait initialiser le vecteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<int> A::pouet = std::vector<int>();
    Je ne comprend pas bien pourquoi...

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Parce que les données membres statiques doivent être explicitement définies dans exactement une unité de compilation.

    Mais je me demande pourquoi on ne peut reposer sur l'initialisation par défaut d'un vecteur.

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Ce n'est pas un problème d’existence ou non d'une initialisation par défaut (le code d'exemple de la FAQ utilise un int, qui possède aussi une initialisation par défaut) mais un problème spécifique au statique.

    L'explication (ce que j'en ai compris et retenu, attend les compléments/corrections/confirmations des autres) : les objets nonstatic (les instances de ta classe A) et les objets static non pas la même durée de vie (locale pour les objets, le programme ou la librairie pour les static). Sans cette déclaration, la variable static ne sera pas correctement créée.
    Pour le pourquoi le compilateur ne créé par cette variable tout seul à partir ce la définition... je sais pas trop. Probablement pour éviter de créer une instance d'un variable static dans toutes les unités de compilation qui déclarent la classe dans utiliser la variable static.

  6. #6
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Probablement parce que la déclaration du membre statique dans le corps de la classe n'est qu'une... déclaration...

    Lorsque tu définis le membre en question, tu peux utiliser l'initialisation par défaut, comme tu l'appelles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Fichier d'en-tête
     
    class A
    {
     
        static TYPE pouet;
     
    };
     
    /////////////////
     
    // Fichier d'implémentation
     
    TYPE A::pouet; // À condition que le constructeur par défaut de TYPE soit accessible...
    Edit: grillé...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    OK, merci !

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

Discussions similaires

  1. [XL-2003] [XL-2003 & 2007] Problème pour redimensionner une plage nommée
    Par panda31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/01/2012, 17h05
  2. Problème pour redimensionner un Clip
    Par Islington_ dans le forum EDI/Outils
    Réponses: 0
    Dernier message: 14/09/2010, 20h27
  3. Réponses: 14
    Dernier message: 03/10/2008, 18h45
  4. [DEBUTANT]Problème pour redimensionner un JScrollPane
    Par marc003 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 18/01/2008, 18h14
  5. [Struts] Problème pour itérer sur un vecteur
    Par vallica dans le forum Struts 1
    Réponses: 5
    Dernier message: 24/04/2006, 15h45

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