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 :

Initialisation des éléments d'un tableau d'int


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 56
    Par défaut Initialisation des éléments d'un tableau d'int
    Bonjour, j'ai un projet de C++ à faire.
    Il s'agit d'un puissance 4.
    Le problème c'est que je n'arrive pas à initialiser les éléments d'un tableau :
    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
     
    class Grille {
        private :
        static const int LIGNE = 6;
        static const int COLONNE = 7;
        static const char X = 'X';
        static const char O = 'O';
        char grille[LIGNE][COLONNE];
        int remplissageColonne[COLONNE] = {0}; //Ca ne marche pas
     
        public :
        Grille();
        bool estPleine();
        void jouerCoup(int, char);
        void afficherGrille();
        void remplirGrille();
     
    };
    J'ai trouvé le moyen de contourner le problème en l'initialisant par une boucle for dans mon constructeur, mais j'aimerais comprendre pourquoi de cette manière ça ne marche pas...

    Merci d'avance.

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    en c tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int toto[10] = {1, 2, 6, 5, 2, 1, 9, 8, 1, 5};
     
    int toto[10] = {0,};
    pour la seconde la "," indique que tu veux l'appliquer a tout le tableau.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 56
    Par défaut
    Merci, mais ça ne fonctionne pas.

  4. #4
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    as tu remarqué la virgule int toto[10] = {1,}?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 56
    Par défaut
    Oui, je l'ai vue.
    D'ailleurs je ne connaissais pas cette syntaxe.

    Peut-être que les erreurs du compilo vous aiderons :

    grille.h |8| error: a brace-enclosed initializer is not allowed here before '{' token|
    grille.h |8| error: ISO C++ forbids initialization of member `remplissageColonne'|
    grille.h |8| error: making `remplissageColonne' static|
    grille.h |8| error: invalid in-class initialization of static data member of non-integral type `int[7]'|
    ||=== Build finished: 4 errors, 0 warnings ===|

    J'utilise le compilateur de Code Blocks.

  6. #6
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    cette initialisation est a faire dans le constructeur pas au niveau de la déclaration des attributs.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 56
    Par défaut
    D'accord mais ça ne fonctionne pas non plus :

    grille.cpp || In constructor `Grille::Grille()'
    grille.cpp |7| error: expected primary-expression before '{' token|
    grille.cpp |7| error: expected `;' before '{' token|
    ||=== Build finished: 2 errors, 0 warnings ===|

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 56
    Par défaut
    Bon finalement, j'ai fait avec une boucle dans le constructeur.
    Merci quand même.

  9. #9
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    A ma conaissance, il n'est pas possible d'initialiser le tableau comme tu souhaiterais le faire.
    Ceci n'est possible que pour une variable statique.

    Je m'explique :
    -Si la variable est statique, alors elle n'existe qu'une unique fois dans le programme. On trouveras donc dans le fichier ELF/PE(le binaire .bin/.exe) la description du contenu de la dite variable globale.
    -Dans le cas d'une variable membre d'une classe instancié, la mémoire seras soit prise dans la stackframe(dans la pile/stack) de la fonction où à lieu la construction, soit dans le tas(heap). Il faudra donc que le programme initialise lui même la mémoire.
    Normalement, les valeurs que prennent les variables sont spécifier dans le constructeur, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Object::Object()
    :var1(0), var2("twiti")
    {
    //code
    }
    Malheureusement je ne connait pas de syntaxe pour la construction d'un tableau.

    Tu peux donc initialiser toi même la mémoire comme tu le fait, via un for, ou utiliser quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <cstring>
    //...
    memset(tab, 1, sizeof(tab)); //Note que seizeof(tab) ne fonctionne correctement que parce qu'il sagit d'un tableau statique. Pour un dynamique, on utiliseras sizeof(*tab)*nbelements.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

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

Discussions similaires

  1. Ajouter des élément a un tableau
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/07/2007, 14h23
  2. Réponses: 7
    Dernier message: 21/08/2006, 13h58
  3. [Struts] ordre des éléments dans un tableau de propriétés
    Par zais_ethael dans le forum Struts 1
    Réponses: 2
    Dernier message: 09/05/2006, 15h54
  4. Réponses: 4
    Dernier message: 17/04/2006, 20h10
  5. [dom je pense]accéder à des éléments d un tableau sans id
    Par luta dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 07/02/2006, 15h31

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