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 :

un problème avec un tableau d'objet, erreur bete ?


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut un problème avec un tableau d'objet, erreur bete ?
    salut à tous...


    bon voila mon problème

    j'essaie de créer un tableau d'objet... donc tout d'abord voici mon objet...

    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
    class tower{
     
    private :
     
    char*name;
    float freq;
    int tx;
    int ty;
    int longueur;
     
    public :
    tower();
    tower(char*,float, int, int , int );
    void settx(int);
    void setty(int);
    void setname(char*);
    void setfreq(float);
    void setlong(int);
    int gettx();
    int getty();
    float getfreq();
    int getlongueur();
     
    };

    ensuite voici les constructeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tower ::tower(){
     
     
    freq=0;
    tx=0;
    ty=0;
    longueur=0;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tower :: tower(char*nom, float fr, int x, int y, int longu){
     
     
    name=nom;
    freq=fr;
    tx=x;
    ty=y;
    longueur=longu;
    }

    et voici mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tower tabtower[50];
     
     
    tabtower[0].settx(400);
    tabtower[0].setty(400);
    tabtower[0].setname("istres");
    tabtower[0].setfreq(150.00);
    tabtower[0].setlong(1500)

    donc en fait je veux créer un tableau de 50 objets "towers" et ensuite initialiser le premier avec les fonctions set..


    malheureusement le compilateur (dev c++) me dit

    48 expected constructor, destructor, or type conversion before '.' token
    48 `,' or `;' before '.' token


    et meme chose pour les lignes suivantes...

    le problème est que j'arrive pas à voir mon erreur, car j'ai bien un constructeur par défaut... mais je sais pas pourquoi je sens que j'ai oublier un détail très bete... mais bon il est tard... donc soyez indulgents svp :p


    voila merci beaucoup...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    bon je ne suis pas un pro, mais j'ai était confronté à ton problème et moi j'ai choisi l'allocation dynamique et ca marche nikel :

    tabtower = new tower[50];


    Par contre pourquoi tu définis un Setfx et Getfx ...etc

    Ne serait il pas mieu de mettre la variable public, ca reviendrait au même non et ca serait plus facile non ?

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    La mettre public ? non...
    Sinon, pourquoi des char* et pas des string ?

  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 : 39
    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
    La mettre public ? non...
    C'est discutable. Si la structure n'est là que pour aggréger plusieurs membres sans fournir de traitement particulier, alors passer par des accesseurs c'est un peu se faire ch*** pour rien.

    A part ça, le code est correct et ne devrait pas générer ce genre d'erreur. A moins que je n'ai loupé quelque chose moi aussi.

    Tu devrais également utiliser std::string pour tes chaînes, vu comment tu les gères (pas).

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Laurent Gomila
    C'est discutable. Si la structure n'est là que pour aggréger plusieurs membres sans fournir de traitement particulier, alors passer par des accesseurs c'est un peu se faire ch*** pour rien.
    C'est vrai

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    ok donc pour résumer :

    _ alllocation dynamique....
    _ est mise en publique ?




    cependant j'aimerais comprendre mon erreur...


    en tout cas merci beaucoup pour vos précieuses réponses

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Je disais de les mettre public car dans son cas, il n'y a aucun intêret de les mettre private, car tu peux y accéder et modifier les valeurs en dehors des fonctions membre, ou est l'intêret du private ?

    Par contre il faut faire gaffe au tableau static, c'est pourquoi je voulais qu'il test en allocation dynamique, exemple concret :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int tab[1000000];
     
    for(i=0, i<=1000000;i++) tab[i] = i;
    Normalement ce code lors du lancement, devrais faire une belle erreur

    par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab = new int[1000000];
     
    for(i=0, i<=1000000;i++) tab[i] = i;
    Lors du lancement tous devrait bien ce passé.

  8. #8
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    ... Dit nous pour quelle ligne l'erreur est elle donnée (et de quel fichier: .h ou .cpp)

    Par contre, ta gestion des char* est peu orthodoxe... tu as un pointeur sur un char et tu comptes simplement lui assigné l'adresse d'une chaine de caractere passée en parametre , je ne sais meme pas qu'elle résultat cela peut avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabtower[0].setname( "istres" );  //je suppose que tu fais juste un = comme pour ton constructeur...
    Comment est géré "istres" au niveau memoire dans l'histoire???
    Avant de poser une question, lire la Avant de répondre, lire la question

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    essaye ca et ca marchera surement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tower *tabletower[50];
    //tableau de pointeur c la forme la plus utilisé pr les tableux d'objets
    tabletower[i]=new tower;
    puis tu peux faire tous ce que tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabletower[0].settx(400);
    n'oublie pas de le mettre resolu by

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    a propo t'as une autre erreur
    lors de l'utilisation de char *
    n'oubli pas de faire l'allocation
    name =new char;
    dans le constructeur sinon ca va pas marcher
    et tu n'aura pas d'espace pour stcker le mot

  11. #11
    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 : 39
    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
    Citation Envoyé par arcan2z
    essaye ca et ca marchera surement
    tower *tabletower[50];
    //tableau de pointeur c la forme la plus utilisé pr les tableux d'objets
    tabletower[i]=new tower;
    puis tu peux faire tous ce que tu veux

    tabletower[0].settx(400);
    n'oublie pas de le mettre resolu by
    Aucun rapport. S'il veut faire un tableau d'objets c'est très bien, pas la peine d'introduire des erreurs / fuites potentielles. Et s'il a un tableau de pointeurs il faudra utiliser tabletower[0]->xxx.

    a propo t'as une autre erreur
    lors de l'utilisation de char *
    n'oubli pas de faire l'allocation
    name =new char;
    dans le constructeur sinon ca va pas marcher
    et tu n'aura pas d'espace pour stcker le mot
    C'est pour ça qu'on s'evertue à parler de std::string

  12. #12
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par harsh
    Par contre, ta gestion des char* est peu orthodoxe... tu as un pointeur sur un char et tu comptes simplement lui assigné l'adresse d'une chaine de caractere passée en parametre , je ne sais meme pas qu'elle résultat cela peut avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabtower[0].setname( "istres" );  //je suppose que tu fais juste un = comme pour ton constructeur...
    Comment est géré "istres" au niveau memoire dans l'histoire???
    Bah oui, j'insiste, je me demande ou est placé en memoire la chaine "istres" et qu'elle est sa portée... bref, quelle grosse gourde il y a a faire avec
    Avant de poser une question, lire la Avant de répondre, lire la question

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Laurent Gomila
    S'il veut faire un tableau d'objets c'est très bien, pas la peine d'introduire des erreurs / fuites potentielles.
    Entièrement d'accord.
    Et je dirais même plus, d'une façon plus générale, que l'allocation automatique d'objets est le choix qui s'impose (vs l'allocation dynamique) à chaque fois que c'est possible.
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

Discussions similaires

  1. Problème avec un tableau d'objets
    Par ChPr dans le forum Android
    Réponses: 4
    Dernier message: 30/12/2014, 11h16
  2. [PHP 5.2] Problème avec un tableau d'objet
    Par anthonyplay dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2009, 15h44
  3. Problème avec un tableau d'objet
    Par tyrant dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 18/11/2006, 19h45
  4. problème avec un tableau dans un insert ...
    Par vbcasimir dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2005, 14h31
  5. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31

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