Partage
  • Partager sur Facebook
  • Partager sur Twitter

Initialisation d'un tableau dans le constructeur ?

Comment faire puisqu'il est impossible d'initialiser en déclaration ?

Sujet résolu
Anonyme
    6 avril 2008 à 21:19:23

    Bonsoir à tous,

    Je fais appel à vous pour résoudre ce problème. Comment initialiser un tableau (ici bidimensionnel de surcroît) dans le constructeur d'une classe, puisqu'il est en effet impossible de l'initialiser directement depuis sa déclaration dans la partie privée de la classe...

    1. private:
    2.         enum {LARGEUR = 4, HAUTEUR = 4, NBDES = LARGEUR * HAUTEUR, NBFACES = 6};
    3.         char des[NBDES][NBFACES] = {
    4.         {'T','U','P','S','E','L'},
    5.         {'M','A','S','R','O','I'},
    6.         {'G','I','T','N','E','V'},
    7.         {'Y','U','N','L','E','G'},
    8.         {'D','E','C','P','A','M'},
    9.         {'K','E','O','T','U','N'},
    10.         {'S','E','R','L','A','C'},
    11.         {'L','I','R','E','W','U'},
    12.         {'E','A','A','T','O','I'},
    13.         {'D','E','S','T','O','N'},
    14.         {'S','I','H','F','E','E'},
    15.         {'N','E','H','R','I','S'},
    16.         {'T','I','B','R','A','L'},
    17.         {'B','O','Q','M','A','J'},
    18.         {'Z','E','N','V','A','D'},
    19.         {'F','I','X','R','O','A'}};


    (Sinon, hein, pas de problème sur le tableau lui-même. Déclaré et initialisé en tant que variable globale (berk !!! :-° ) ça marche impeccable ^^

    Ok, donc on laisse seulement :
    1. private:
    2.         enum {LARGEUR = 4, HAUTEUR = 4, NBDES = LARGEUR * HAUTEUR, NBFACES = 6};
    3.         char des[NBDES][NBFACES];


    Et dans le constructeur :
    1. Class::Class() {
    2.         des = {
    3.         {'T','U','P','S','E','L'},
    4.         {'M','A','S','R','O','I'},
    5.         {'G','I','T','N','E','V'},
    6.         {'Y','U','N','L','E','G'},
    7.         {'D','E','C','P','A','M'},
    8.         {'K','E','O','T','U','N'},
    9.         {'S','E','R','L','A','C'},
    10.         {'L','I','R','E','W','U'},
    11.         {'E','A','A','T','O','I'},
    12.         {'D','E','S','T','O','N'},
    13.         {'S','I','H','F','E','E'},
    14.         {'N','E','H','R','I','S'},
    15.         {'T','I','B','R','A','L'},
    16.         {'B','O','Q','M','A','J'},
    17.         {'Z','E','N','V','A','D'},
    18.         {'F','I','X','R','O','A'}};
    19. }

    Mais arrrf, pas le droit de faire ça !
    "error: expected `;' before '{' token"
    "error: expected primary-expression before '{' token"

    La question que je me pose donc est : comment initialiser ce (foutu) tableau avec un contenu et une taille désesperement fixe... ? :euh:

    Merci de votre aide o_O

    François ^^
    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2008 à 21:21:48

      utilise la liste d'initialisation. Sinon tu sert a toi de la classe string ;)
      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2008 à 21:41:01

        - boost.assign,
        - passe par un tableau intermédiaire et copie toutes ses valeurs
        - attends le C++0x
        - ...

        Elles sont sensées évoluer ces valeurs ?
        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        Anonyme
          6 avril 2008 à 22:00:33

          Hello

          J'ai appliqué la seule solution que l'on est censée connaître (tout ceci est pour un projet IUT...)

          Ce qui donne :

          1. Class::Class() {
          2.         char des_tmp[16][6] = {
          3.         {'T','U','P','S','E','L'},
          4.         {'M','A','S','R','O','I'},
          5.         {'G','I','T','N','E','V'},
          6.         {'Y','U','N','L','E','G'},
          7.         {'D','E','C','P','A','M'},
          8.         {'K','E','O','T','U','N'},
          9.         {'S','E','R','L','A','C'},
          10.         {'L','I','R','E','W','U'},
          11.         {'E','A','A','T','O','I'},
          12.         {'D','E','S','T','O','N'},
          13.         {'S','I','H','F','E','E'},
          14.         {'N','E','H','R','I','S'},
          15.         {'T','I','B','R','A','L'},
          16.         {'B','O','Q','M','A','J'},
          17.         {'Z','E','N','V','A','D'},
          18.         {'F','I','X','R','O','A'}};
          19.         for(int i = 0 ; i < NBDES ; ++i) {
          20.                 for(int j = 0 ; j < NBFACES ; ++j) {
          21.                         des[i][j] = des_tmp[i][j];
          22.                 }
          23.         }
          24. }


          C'est pas beau beau, mais ça à le mérite de marcher, je passe donc en résolu.

          Merci à vous (j'essayerais de lire les comments des autres même si ça à l'air plutôt fantaisiste :-°

          François :p
          • Partager sur Facebook
          • Partager sur Twitter
            7 avril 2008 à 0:22:15

            pourquoi pas une allocation dynamique?
            Hein? une alloc me semble de mise.... :euh:
            Donc...tu laisse ton pointeur pointé et tu lui donne une valeur de tableau vers laquel pointé ...lequel serait bidimensionnel...
            et met les deux dimension dans à initialiser dans ton constructeur!
            comme ca BEDANG! t'a ton tableau et tu lui met les valeurs que tu veu et tout devrait bien se passer
            • Partager sur Facebook
            • Partager sur Twitter
              7 avril 2008 à 0:50:17

              Un char[][] est très loin d'être un char**. Et puis bon... quand les dimensions sont statiques, quel intérêt d'une allocation ... qui ne résout aucunement sa problématique d'initialisation.

              S'il n'a pas d'évolution des valeurs prévues, il se complique la vie (une bonne constante globale localisée au .cpp suffirait), sinon sa solution est tout à fait valable.
              • Partager sur Facebook
              • Partager sur Twitter
              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                7 avril 2008 à 1:27:19

                mmm....si j'ai bien compris, son probleme était qu'il n,arrivait pas a construire son tableau à 2 dimension....je lui ai proposé une methode qui lui permet de choisir la taille de chacune de ses deux dimension.

                ps: bien que je n,.aille jamais essayer *montableau = new char[intx][inty];

                cela pointe vers le tableau qu'il souhaite, modifiable à souhait
                • Partager sur Facebook
                • Partager sur Twitter
                  7 avril 2008 à 2:10:28

                  Son problème est qu'il ne peut pas utiliser d'/initializer list/ (!= /initialization list/) sur une variable membre.

                  Il ne s'est jamais agit d'un problème d'allocation -- celle que tu suggères est par ailleurs fausse, cf la FAQ C++ de Développez pour celle qui compile et qui est robuste.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                  Initialisation d'un tableau dans le constructeur ?

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown