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 :

tableaux statiques et attributs interdépendants


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut tableaux statiques et attributs interdépendants
    Bonjour et merci de m'accueillir ici !
    Je suis vraiment novice en C++, j'ai seulement suivir le cours d'un autre site.

    Je suis en train de créer une classe dans laquelle deux attributs sont interdépendants. Plus précisement, l'un est un entier naturel et l'autre est tableau statique de taille l'entier précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     private:
      int const m_taille;
      Classe m_objet[m_taille];
    Malheureusement le compilateur ne veut pas de cela :-(.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fichier.h:20: error: invalid use of non-static data member ‘Classe::m_taille’
    Fichier.h:21: error: from this location
    Fichier.h:21: error: array bound is not an integer constant
    Si je remplace la dernière ligne par :
    et que je change mes constructeurs de mon fichier .cpp, je n'ai plus de problème.

    Quelle est une solution ? Merci d'avance !

    jean-alesi

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Salut,
    La taille de ton tableau 'm_objet' n'étant pas connue à la compilation, il faut créer celui-ci de façon dynamique.

    Déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private:
      const int m_taille;
      Classe *m_objet;
    Et dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_objet = new Classe [ m_taille ];
    Ne surtout pas oublier de faire le destructeur et d'y mettre :

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Deux possibilités :

    Soit la taille de ton tableau est une vraie constante, connue à la compilation (comme ton exemple avec 2), dans ce cas là, tu y es presque, le seul problème dans ton code est qu'avoir mis const int m_taille; dans la classe sous entend que certes, m_taille est constant, mais il peut varier d'une instance de la classe à l'autre. Donc ce n'est pas une constante connue à la compilation. Si cette constante était partagée entre toutes les instance de ta classe, elle deviendrait alors connue à la compilation. C'est ce que te suggère le message d'erreur du compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // dans le .h
    class A{
    private:
      static const int m_taille = 2;
      Classe m_objet[m_taille]; // suppose que Classe ait un constructeur par défaut
    }
    // Dans un .cpp
    const int A::m_taille; // obligatoire pour que le compilo sache où initialiser cette constante
    Autre possibilité, ton tableau est de taille constante pendant toute la vie de ton objet, mais cette taille varie d'une instance à l'autre. En C++, c'est tout comme si la taille était variable. Ce que te propose berty est un début de solution, mais n'est absolument pas suffisant (que se passe-t-il quand une instance de cette classe est copiée ?). Le plus simple est d'utiliser la classe de la bibliothèque prévue pour gérer des tableaux de taille variable : vector

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Dans le .h
    class A
    {
      A(int taille);
      const int m_taille;
      std::vector<Classe>  m_objet;
    };
     
    // Dans un .cpp
    A::A(int taille) : 
      m_taille(taille), 
      m_objet(taille) // suppose que Classe ait un constructeur par défaut
    {
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut
    Merci pour vos réponses. J'ai finalement utilisé les "vectors" et tout fonctionne comme je le souhaite .

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

Discussions similaires

  1. Tableaux Statiques et calculs
    Par Caps59 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/09/2008, 19h47
  2. Classe statique et attributs
    Par ymoreau dans le forum C++
    Réponses: 2
    Dernier message: 02/07/2008, 09h12
  3. Réponses: 11
    Dernier message: 16/07/2007, 16h33
  4. tableau dynamique de tableaux statiques.
    Par RaphAstronome dans le forum C++
    Réponses: 2
    Dernier message: 18/02/2007, 14h43
  5. Redéfinition de tableaux statiques
    Par j_b007 dans le forum Langage
    Réponses: 5
    Dernier message: 26/01/2006, 09h10

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