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 :

[debutant] rappel de la classe dans le constructeur


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 26
    Points : 23
    Points
    23
    Par défaut [debutant] rappel de la classe dans le constructeur
    voial j' ai un petit probleme :

    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
     
     
    class cellule {
     
      public:
     
      int key;                      
      int value;                      
      cellule * next;  
     
     
    cellule(int,int,int);
     
     
     
    }; 
     
    cellule::cellule(int level, int key, int value) {
        this->key = key;
        this->value = value;
        this->next = new cellule[level+1];
      }
    le compilo n' accepte pas ma derniere ligne, je voudrais que ma cellule soit constitué de 2 int et d' un tableau de cellule.

    merci !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 54
    Points : 76
    Points
    76
    Par défaut
    Première chose, je crois que si tu nous donnai le résultat que te renvoie le compilo, cela pourrai nos aider.

    Ensuite, je vaux bien croire qu'il est pas content car le seul constructeur que tu as prend 3 int en paramètres. Donc, lors de la création de ton tableau tu dois lui indiquer les valeurs à utiliser pour l'appel au constructeur de chaque cellule. Cela donne qqch du style (suis par sur que la syntaxe soit correcte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->next = new cellule[level+1](level, key, value);
    Enfin, si tu fait ça, tu risque d'avoir une boucle infinie. Une solution serait d'ultiliser un malloc plutot que new, pour qu'il n'ya ait pas d'appel au constructeur. Une autre solution est de faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cellule::cellule(int level, int key, int value) {
        this->key = key;
        this->value = value;
        if (cellule)
            this->next = new cellule[level+1](level-1, key, value); //rmq attention si cellule < 0!!!
        else this->next = null;
      }
    Cela dit, je doute que se soit ce que tu veux. (en fait, quelles sont les cellules qui doivent se trouver dans ton tableau????) A toi d'adapter ce code en fonction de ce que tu veux faire.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    en faite je veux faire comme une list chainé mais avec la possibilité de pointer vers plusieurs cellules et pas seulement sur la suivante donc je voudrais que dans chaque cellule que je construis, j' ai a chaque fois la possibilité de pointer vers d' autres.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->next = new cellule[level+1](level, key, value);
    Il est impossible d'utiliser autre chose que le constructeur par défaut pour construire les éléments d'un tableau (hormis std::vector).

    Donc, il faudra fournir à la classe un constructeur par défaut, ou bien changer de stratégie.

  5. #5
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Alors tu ne construit pas de cellule dans ton constructeur de cellule.
    Tu vas d'abord construire une cellule C1, puis tu vas ajouter à ta liste chainée une autre cellule C2, tu vas alors donner à C1 un pointeur sur la cellule C2 qui sera sa suivante.... Mais à la construction de C1 tu ne construit pas C2... Quand tu construit ta cellule tu met le pointeur à NULL, ou alors pointant sur la cellule suivante. Mais tu ne construit pas la cellule suivante ici... Tu la construit ailleurs en dynamique par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Cellule::Cellule(int Key, int Value, Cellule* NextCellule)
    {
        this->Key = Key;
        this->Value = Value;
        this->Next = NextCellule;
    }
    Ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Cellule::Cellule(int Key, int Value)
    {
        this->Key = Key;
        this->Value = Value;
        this->Next = NULL;
    }

  6. #6
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    salut

    Citation Envoyé par newtito
    en faite je veux faire comme une list chainé mais avec la possibilité de pointer vers plusieurs cellules et pas seulement sur la suivante donc je voudrais que dans chaque cellule que je construis, j' ai a chaque fois la possibilité de pointer vers d' autres.
    tu peux utiliser un vector<cellule*> dans lequelle tu peux mettre un lien vers autant de cellule que tu veux ou un malloc(nombreCellule*sizeof(cellule)) pour pointer vers NombreCellule cellules.

    mais tu ne dois pas utiliser le constructeur de cellule dans ton constructeur sinon tu ne pourras pas declarer de cellule terminative (ouais je sais ce mot existe probablement pas mais j'Espere me faire comprendre lol) ne pointant vers aucune autre cellule (des cellules NULL) et tu risques tres fortement de faire une boucle infinie.

    Vincent

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    <version simplifiée pour débutants et intermédiaires>On ne peut pas et ne doit faire de malloc pour des objets. new[] et vecteurs sont les deux seules familles de solutions correctes.
    </>

Discussions similaires

  1. Instancier une classe dans un constructeur d'une autre classe ?
    Par ctobini dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/12/2012, 11h11
  2. Passer une référence à une classe dans un constructeur
    Par alefriedx dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 09/02/2011, 22h07
  3. Réponses: 6
    Dernier message: 10/06/2007, 13h33
  4. [debutant] de finition de classe dans namespace
    Par Battosaiii dans le forum Débuter
    Réponses: 2
    Dernier message: 25/08/2006, 11h37
  5. Réponses: 3
    Dernier message: 06/11/2005, 18h02

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