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++

  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 débute en C++ et je suis en train de construire un petit programme et je viens de rencontrer une embûche...


    Je suis en train de construire une classe tableau qui contient des objets "cellules". Je ne semble pas être capable d'utiliser mes objets cellules dans ma classe tableau pour une raison ou une autre...

    Voici le code:

    TABLEAU.HPP
    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
    /*
    *Classe qui représente un tableau
    *
    *
    *
    *
    */
     
    #ifndef TABLEAU_HPP_
    #define TABLEAU_HPP_
     
    #include <iostream>
    #include "Cellule.hpp"
     
    using namespace std;
     
     
     
    class Tableau
    {
    public:   
     
        //Constructeurs
        Tableau();
        Tableau(const Tableau& t);
     
        //Destructeur
        ~Tableau();
     
        //Opérateurs
        //Tableau& operator=(const Tableau& t);
        //bool operator==(const Tableau& t) const;
     
        //accesseurs
        int getNombreCellules(Tableau ** tab) const;
        bool estVide() const;
        Cellule& getCellule(int i , int j);
     
    private:
     
         Cellule ** grille;
     
    };
     
    #endif

    TABLEAU.CPP
    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
    /*
    *Classe qui représente un tableau
    *
    *
    *
    *
    */
     
    #include "Tableau.hpp"
     
    const int largeur = 24;
    const int longueur = 80;
     
    //Constructeurs
    Tableau::Tableau()
    {    
        for(int i = 0 ; i < largeur ; i++)
        {  for (int j = 0 ; i < longueur ; j++)
           {
     
               grille[i][j] = new Cellule(i,j,false);
     
     
           }
        }
     
    }
    Tableau::Tableau(const Tableau& t)
    {
        *this = t;
    }
     
    //Destructeur
    Tableau::~Tableau()
    {
        delete [] grille;
    }
     
    //Opérateurs
    /*Tableau& Tableau :: operator=(const Tableau& t)
    {
        
    }
    */
    /*bool Tableau:: operator==(const Tableau& t) const
    {
        
    }
    */
     
    //accesseurs
    int Tableau::getNombreCellules(Tableau ** tab) const
    {
        int nombreCellules = 0;
     
        for(int i = 0 ; i < largeur ; i++)
        {  for (int j = 0 ; i < longueur ; j++)
           {
     
               cell = grille[i][j];
     
               if (cell.getEtat())
               {
                   nombreCellules ++;
               }
     
           }
        }
        return nombreCellules;
     
    }
    Cellule& Tableau::getCellule(int i , int j) const
    {
        return grille[i][j];
    }
     
    bool Tableau::estVide() const
    {
        return Tableau.getNombreCellules()==0;
    }

    Merci à l'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Tu fais un appel dans ton constructeur grille[i][j] avant même d'avoir allouer grille=> plantage, alloue avant ou declare ta grille comme ça Cellule grille[Nlignes][Ncolonnes]

  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
    Je ne suis pas sûr de tout à fait comprendre car j'ai déclarer ma grille dans tableau.hpp comme variable private, je ne comprends pas pourquoi je devrais la déclarer une autre fois...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    C'est juste que de la maniere dont tu l 'as déclaré, tu ne peux pas faire grille[i][j];

    ex :
    int tab[10];
    tab[5] = 0; => ok
    int* tab;
    tab[5] = 0 =>plante
    mais;
    int* tab;
    tab = new int(10);
    tab[5] = 0 => ok

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    En plus, si tu veux mettre des pointeurs de cellules dans ton tableau il te faut grille***; parce que avec new cellule tu récupères un pointeur de cellules

  6. #6
    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
    Alors je crois que j'ai bien compris mais il me renvoit tout de même un message d'erreur... Merci pour ta patience...

    Voici comment je l'ai modifié:

    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
    //Constructeurs
    Tableau::Tableau()
    {    
     
        grille = new Cellule[largeur][longueur];
     
        for(int i = 0 ; i < largeur ; i++)
        {  for (int j = 0 ; i < longueur ; j++)
           {
     
               grille[i][j] = new Cellule(i,j,false);
     
     
           }
        }
     
    }

  7. #7
    Membre averti
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Par défaut
    Il y a un indice i qui traine dans la boucle sur j...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Hello watiero,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille = new Cellule[largeur][longueur];
    Ceci ne fait pas ce que tu attends. L'opérateur "new" ne prend qu'une seule paire de crochets. Ce que tu fais, c'est allouer un tableau de "largeur" cellules, puis référencer la "longueur+1"-ème valeur. Ce que tu devrais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    grille = new (Cellule*)[largeur];
    for (int i = 0; i < largeur; ++i)
    {
      grille[i] = new Cellule[longueur];
    }
    Si je puis me permettre, tu devrais d'ailleurs plutôt utiliser std::vector, ou alors (si tu n'as pas besoin de performances poussées) std::map<std::pair<int, int>, Cellule*>.

    Carl

  9. #9
    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
    Merci beaucoup, j'ai pu résoudre mon problème grace à toi!

    Merci pour le conseil de la std mais en fait nous commencons à la voir. Ce sera pour mon prochain travail

+ 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: 18
    Dernier message: 15/02/2008, 16h16
  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