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 :

Créer un tableau dynamique de pointeur


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 30
    Par défaut Créer un tableau dynamique de pointeur
    Bonjour

    j'essaye en vain de créer un tableau dynamique qui contient des pointeurs sur des objets.

    J'ai une classeA qui contient un tableau dynamique de pointeur sur des classeB.
    ClasseA.h
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    #include <iostream>
    #include "ClasseB.h"
     
    using namespace std;
     
    class ClasseA{
     
    	public:
    	ClasseB* tab[];
    	int i;
     
    	ClasseA(int nb);
    	void ajouter(ClasseB *cB);
     
    };
    ClasseA.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
     
    #include "ClasseA.h"
     
     
    ClasseA::ClasseA(int nb){
    	i = 0;
    	*tab = new ClasseB[nb];
    }
     
    void ClasseA::ajouter(ClasseB *cB){
    	cout<<"i="<<i<<endl;
    	tab[0] = cB;
    	i++;
    }
    ClasseB.h
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    #include <iostream>
     
    using namespace std;
     
    class ClasseB{
    	public:
    	int numero;
    	string nom;
     
    	ClasseB(int nu, string n):numero(nu), nom(n){}
    	ClasseB();
     
    };
    ClasseB.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "ClasseB.h"
     
     
    ClasseB::ClasseB(){
    	numero = 99;
    	nom = "rien";
    }
    Main.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
    #include "ClasseA.h"
     
    int main(int Argc, char **Argv){
     
    	ClasseA cA = ClasseA(10);
            cout<<"i="<<cA.i<<endl;
     
    	ClasseB *cB1 = new ClasseB(1, "toto1");
    	ClasseB *cB2 = new ClasseB(2, "toto2");
    	ClasseB *cB3 = new ClasseB(3, "toto3");
     
    	cA.ajouter(cB1);
    	cA.ajouter(cB2);
    	cA.ajouter(cB3);
     
    	/*for(int i = 0; i<10; i++){
    		cout<<"indice = "<<i<<" Nom="<<(cA.tab[i])->nom<<endl;
    		cout<<"Numero="<<(cA.tab[i])->numero<<endl;
    	}*/
     
    	return 1;
    }
    Quand jaffiche la variable i apres la creation de cA je nobtiens pas la valeur 0 que je devrais avoir, j'obtiens un nombre au hasard.
    J'obtiens une erreur de segmentation car la variable i vaut n'importe quoi.

    Qu'est ce qui cloche?

    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Par défaut
    Si je ne me trompe pas, "*tab = new ClasseB[nb];" s'écrit plutôt comme ça : "tab = new ClasseB[nb];".

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut,

    Essaye d'utiliser les vector ou autre conteneurs de la std (selon ton besoin), ça sera beaucoup plus simple, car avec un tableau, tu es obliger d'allouer un taille (nombre d'éléments) et si tu dépasse cette taille tu doit allouer un nouveau tableau et copier tous les éléments de l'ancien dans le nouveau.

    Les vector de la std (classe std::vector<type>) sont fait pour ce genre d'utilisateur (c'est en fait une liste chaînée en mémoire) du coup pas de problème de dépassement.

    Va sur ce site pour savoir comment les utiliser :

    Ici

    Cordialement,
    NeoKript

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Staithes Voir le message
    [CODE]ClasseB* tab[];[\code]

    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *tab = new ClasseB[nb];
    Qu'essaies-tu de faire précisément ici ?

    Citation Envoyé par NeoKript Voir le message
    Les vector de la std (classe std::vector<type>) sont fait pour ce genre d'utilisateur (c'est en fait une liste chaînée en mémoire) du coup pas de problème de dépassement.
    Euh non, les std:vector ne sont pas des listes chaînées en mémoire. Par contre ils gèrent effectivement l'augmentation de la taille requise.

    Sinon +1 pour utiliser std:vector, à moins bien sur que ce ne soit un exercice.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 30
    Par défaut
    Tout comme je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list<ClasseB*>listeClasseB;
    j'aimerais le faire avec un tableau dynamique

    Cette ligne passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ClasseB** tab2 = new ClasseB* [nb];
    	ClasseB *cB = new ClasseB();
    	tab2[0] = cB;
    Mais si je declare dans ClasseA.h:
    et que je fais dans ClasseA.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ClasseA::ClasseA(int nb){
    	tab = new ClasseB* [nb];
    }
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClasseA.cpp:6: error: incompatible types in assignment of `ClasseB**' to `ClasseB*[0u]'

Discussions similaires

  1. créer un tableau dynamique
    Par paolo2002 dans le forum Struts 1
    Réponses: 1
    Dernier message: 06/06/2008, 17h48
  2. Tableau dynamique de pointeurs sur const char*
    Par Le Mérovingien dans le forum Débuter
    Réponses: 6
    Dernier message: 05/06/2008, 14h23
  3. [Tableaux] Créer un tableau dynamique
    Par Ptimoustik dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2008, 20h47
  4. Comment créer un tableau dynamique ?
    Par khokho dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/08/2007, 08h40
  5. [MySQL] Créer un tableau dynamique
    Par Razgriz dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 27/02/2007, 22h52

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