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 :

Probleme avec constructeur.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut Probleme avec constructeur.
    Bonjour je suis débutant en c++ et je suis en train de programmer le "jeu de la vie". J'ai réussi à le programmer sans encapsuler mes données mais ce n'était pas vraiment le but du projet. Alors j'ai créer une classe Tableau et j'ai fourni ses méthodes, et maintenant rien ne va plus. À la création de mon objet tableau, mes valeurs ne s'initialise plus comme il se doit, et l'affichage n'est vraiment pas correct.

    Voici ma classe 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    *
    *Classe qui représente un Tableau
    *
    *
    *
    *
    *
    */
        #include "Tableau2.hpp"
     
        const int NBRELIGNES = 24;
        const int NBRECOLONNES = 80;
     
     
        //Constructeur
        //Initialisation par défaut
        Tableau :: Tableau()
        {
            for(int i = 0 ; i < NBRELIGNES ; i++)
            {  for(int j = 0 ; j < NBRECOLONNES ; j++)
               {
                    grille[i][j] == false;
                    cout << grille[i][j];
                    if(0 == j%80)
                    cout << endl;
     
               }
            }
     
        }
     
        Tableau :: Tableau(const Tableau& tab)
        {
            *this = tab;
            /*for(int i = 0 ; i < NBRELIGNES ; i++)
            {  for(int j = 0 ; j < NBRECOLONNES ; j++)
               {
                    bool etat = grille[i][j];
                    tab.setEtat(i , j , etat);
               }
            }*/
        }
     
        //Destructeur
        Tableau :: ~Tableau()
        {
            delete [] grille;
        }
     
        //accesseurs
        bool Tableau :: getEtat(int i , int j) const
        {
            return grille[i][j];
        }
     
        void Tableau :: setEtat(int i , int j , bool etat)
        {
            grille[i][j] = etat;
     
        }

    et mon main...
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
     
    #include <iostream>
    #include <fstream>
    #include "tableau2.hpp"
    //#include "PortableSleep.hpp"
     
    using namespace std;
     
     
     
    //Prototypes
    void ouvrirFichier(Tableau& tab);
     
    void afficherTableau(Tableau& tab);
     
    int nombreVoisins(int i, int j, Tableau& tab);
     
    void modifierTableau(Tableau& tab1 ,Tableau& tab2);
     
     
    const int NBRELIGNES = 24;
    const int NBRECOLONNES = 80;
     
    int main()
    {
     
        Tableau grille;
        Tableau grilleTemp;
     
        ouvrirFichier(grille);
     
        int i = 0 ;
        while( i < 2){
     
     
        afficherTableau(grille);
        modifierTableau(grille ,grilleTemp);
        i++;
     
        }
     
        system("Pause");
        return 0;
    }
     
     
    void afficherTableau(Tableau& tab)
    {
        for (int i = 0 ; i < NBRELIGNES ; i ++)
        {   for (int j = 0 ; j < NBRECOLONNES ; j++)
            {
              if (j%NBRECOLONNES == 0)
              {
     
                    cout << endl;
              }
              else
              {
                    if (tab.getEtat(i,j) == true)
                    {
                        cout <<i<<j;
                        cout << '+' ;
                    }
                    if (tab.getEtat(i,j) == false)
                    {
                        cout << ' ' ;
                    }
              }
            }
        }
    }
     
     
    //Ouvrir le fichier et initialiser les données dans le tableau
     
    void ouvrirFichier(Tableau&  tab)
    {
     
        ifstream fichier ("test.txt", ifstream::in);
     
     
        while(!fichier.eof())
        {
     
            int i1;
            int i2;
            fichier >> i1 >> i2;
     
            tab.setEtat(i1,i2,true);
     
        }
    }
    /*
    *Modidie le tableau pour passer à la prochaine étape
    *du jeu de la vie en passant par un tableau intermédiaire.
    *
    */
    void modifierTableau(Tableau& tab1, Tableau& tab2)
    {
        tab2 = Tableau(tab1);
     
        for (int i = 0 ; i < NBRELIGNES  ; i++)
        {   for (int j = 0 ; j < NBRECOLONNES  ; j++)
            {
                if(tab1.getEtat(i,j)== false && nombreVoisins(i,j,tab1) == 3)
                {
                    tab2.setEtat(i,j,true);
                }
                if(tab1.getEtat(i,j) == true && !(nombreVoisins(i,j,tab1) == 2 || nombreVoisins(i,j,tab1) == 3 ))
                {
                    tab2.setEtat(i,j,false);
                }
     
            }
        }
     
        tab1 = Tableau(tab2);
     
    }
    int nombreVoisins(int i, int j, Tableau& tab)
    {
        int nombreVoisins = 0;
        if (tab.getEtat(i-1 , j-1) == true)
        {
            nombreVoisins ++;
        }
        if (tab.getEtat(i-1 , j) == true)
        {
            nombreVoisins ++;
        }
        if (tab.getEtat(i-1 , j+1) == true)
        {
            nombreVoisins ++;
        }
        if (tab.getEtat(i , j-1) == true)
        {
            nombreVoisins ++;
        }
        if (tab.getEtat(i , j+1) == true)
        {
            nombreVoisins ++;
        }
        if (tab.getEtat(i+1 , j-1) == true)
        {
            nombreVoisins ++;
        }
        if (tab.getEtat(i+1 , j) == true)
        {
            nombreVoisins ++;
        }
        if (tab.getEtat(i+1 , j+1) == true)
        {
            nombreVoisins ++;
        }
     
        return nombreVoisins;
    }
    Le programme va chercher les données dans un fichier test.txt
    Alors merci à l'avance!

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Il semble que tu ais oublié d'allouer ta grille avec un new.

    MAT.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    À défaut d'avoir l'air vraiment incompétent...est-ce que tu pourrias me donner la syntaxe parce que ca ne semble pas vouloir fonctionner lorsque je le fais...

  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
    Dans le corps de ta classe tableau, tu t'adresses à grille. A la compilation devrait t'être dit que cet objet est inconnu.

    Il s'agit en l'occurrence d'une instance de cette classe (mais comment la classe le saurait-elle ?). Mais pas n'importe laquelle : elle-même... Bref, ce n'est pas gérable. C'est ce qu'on appelle une "mise en abîme". :-)

    Tu dois définir comme variable membre privée un tableau traditionnel, et travailler dessus.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    D'accord je comprends...

    Mais en fait je ne l'avais pas afficher, mais dans mon tableau.hpp, j'ai une variable privé que j'avais déjà nommé grille dans le but de l'utiliser.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    /*
    *
    *
    *Classe qui représente un Tableau
    *
    *
    */
     
    #ifndef  TABLEAU_HPP_
    #define TABLEAU_HPP_
     
    #include <iostream>
     
     
    using namespace std;
     
    class Tableau
    {
        public:
     
            //Constructeur
            Tableau();
            Tableau(const Tableau& tab);
     
            //Destructeur
            ~Tableau();
     
            //accesseurs
            bool getEtat(int i , int j) const;
            void setEtat(int i , int j , bool etat);
     
        private:
     
            bool  grille[24][80];
     
     
    };
     
    #endif

  6. #6
    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
    Et que se passe-t-il, précisément, à la compilation ?

    Tu as des messages d'erreur à nous donner ?

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Ah si grille est un tableau déclaré comme ça il ne faut pas que tu fasses de delete dans ~Tableau du coup.

    MAT.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    En fait, le tout compile, c'est juste que mon constructeur est censé initialiser toutes les cases de ma grille à false. Et si j'essaye d'utiliser ma méthode afficher c'est vraiment n'importe quoi qui affiche... Pourtant j'ai fait les tests pour savoir si le fichier chargeait bien dans le tableau ( peut être que c'est comment je passe mes paramètres.?..) et tout semble correct...

  9. #9
    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
    Quand tu débogues dans le constructeur, ça se passe bien, ou pas ?

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

Discussions similaires

  1. probleme avec constructeur
    Par Ronan_ dans le forum Débuter
    Réponses: 20
    Dernier message: 07/05/2014, 14h42
  2. Probleme avec constructeur
    Par watiero dans le forum C++
    Réponses: 8
    Dernier message: 12/02/2008, 21h16
  3. Probleme avec constructeur surchargé
    Par dr971 dans le forum C++
    Réponses: 3
    Dernier message: 04/04/2007, 11h16
  4. Problème avec le constructeur SAXParser()!
    Par L4BiN dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 21/06/2006, 09h32
  5. Réponses: 13
    Dernier message: 02/02/2005, 00h21

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