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 tableau objet


Sujet :

C++

  1. #1
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut probleme tableau objet
    bonjour

    alors voila je fait un tableau d'objet et lui rentre des valeurs jusqu'a la aucun probleme.

    mais lors du parcours du tableau pour voir le contenue des different objet je me heurte a des 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
    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
    #include <iostream>
    #include <vector>
    #include <cstdlib>
    #include <ctime>
    #include "personnage.h"
    #include "player.h"
    #include "enemy.h"
     
    using namespace std;
     
    int main()
    {
        srand(time(0));    //std::string nom = "guepe";
        player tidus("tidus");
        //enemy monstre("guepe", 50, 0, "poison", 10, 5);
        std::vector<enemy> monstre;
     
        int nbmonstre;
        while(nbmonstre == 0)
            nbmonstre  = rand() % 5;
     
        for(int i = 0; i < nbmonstre; i++)
        {
            monstre.push_back(enemy("guepe", 50, 0, "poison", 10, 5));
        }
     
        int i = 0;
        while(i != nbmonstre)
        {
            monstre[i]->afficheinfo();
            monstre[i].afficheinfo();
            monstre(enemy.afficherinfo());
            monstre[i].(enemy.afficherinfo());
            i++;
        }
     
        /*tidus.afficherinfo();
        monstre.afficherinfo();
     
        tidus.attaquer(monstre);
     
        tidus.afficherinfo();
        monstre.afficherinfo();
     
        tidus.attaquer(monstre);
     
        tidus.afficherinfo();
        monstre.afficherinfo();
        if(monstre.est_vivant() == false)
            monstre.~enemy();*/
     
        //monstre.afficherinfo();
     
     
        return 0;
    }
    comme vous pourrez voir j'ai essayer plusieurs maniere mais cela ne donne rien.

    comment puis je faire pour que cela marche ?

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    A quels problèmes te retrouves-tu confronté ?

    En C++11 tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(auto element : monConteneur)
    {
          std::cout << element << std::endl;
    }
    Tu peux aussi utiliser des itérateurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(MonConteneur::iterator it = monConteneur.begin(); it != monConteneur.end() ; ++it)
    {
          std::cout << *it << std::endl;
    }
    Sinon, quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i = 0; i < nbmonstre; i++)
        {
            monstre.push_back(enemy("guepe", 50, 0, "poison", 10, 5));
        }
    Tu peux faire avant un reserve(nbmonstre) pour réserver l'espace mémoire plutôt que de réallouer pratiquement à chaque push_back un nouvel espace mémoire.

  3. #3
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Si tu parles de la manière d'utiliser ton vecteur c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            monstre[i].afficheinfo();
    Et de plus pour utiliser pleinement le polymorphisme du devrais avoir un vecteur du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector <Personnage> persoTab;

  4. #4
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Bonjour,

    A quels problèmes te retrouves-tu confronté ?
    le probleme viens a ce niveau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int i = 0;
        while(i != nbmonstre)
        {
            monstre[i]->afficheinfo();
            monstre[i].afficheinfo();
            monstre(enemy.afficherinfo());
            monstre[i].(enemy.afficherinfo());
            i++;
        }
    peu importe se que je lui met il me met des erreurs du coup je peut pas parcourir le tableau et utiliser pour chaque objet la methode afficherinfo()

  5. #5
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par PilloBuenaGente Voir le message
    Si tu parles de la manière d'utiliser ton vecteur c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            monstre[i].afficheinfo();
    je fais cela mais il me dis non.

    Citation Envoyé par PilloBuenaGente Voir le message
    Et de plus pour utiliser pleinement le polymorphisme du devrais avoir un vecteur du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector <Personnage> persoTab;

    pourquoi cela ?

  6. #6
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    je fais cela mais il me dis non.
    Il doit te dire plus que non, non ?
    Prends le temps de bien étudier le code que t'a donné Koala01, tu peux créer un tableau de personnage qui pourra être composé de monstre et de personnageJoueur. Et utiliser ceux ci comme un seul type d'objet !

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par devdeb91 Voir le message
    je fais cela mais il me dis non.
    Y'aurait moyen d'avoir un message d'erreur plus... explicite ?


    monstre[i] te retournera un const enemy& ou un enemy&
    http://www.cplusplus.com/reference/v...ector/operator[]/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Y'aurait moyen d'avoir un message d'erreur plus... explicite ?

    bah voici le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\Documents and Settings\kbaes\Bureau\test\main.cpp||In function 'int main()':|
    C:\Documents and Settings\kbaes\Bureau\test\main.cpp|31|error: '__gnu_cxx::__alloc_traits<std::allocator<enemy> >::value_type' has no member named 'afficheinfo'|
    ||=== Build finished: 1 errors, 0 warnings (0 minutes, 8 seconds) ===|

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par devdeb91 Voir le message
    peu importe se que je lui met il me met des erreurs du coup je peut pas parcourir le tableau et utiliser pour chaque objet la methode afficherinfo()
    On ne peut pas deviner tes erreurs, peux-tu nous montrer les messages d'erreurs/warning lors de la compilation ou ce qui se passe lors de l'exécution?

    Sinon PilloBuenaGente c'est trompé, pour bénéficier du polymorphisme, il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector <Personnage *> persoTab;
    Si bien sûr Monstre hérite de Personnage.

    La FAQ C++ devrait contenir des entrées qui pourraient t'expliquer cela plus en détail.

  10. #10
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monstre[i].afficheinfo();
    utilise la fonction afficheinfo() de ta classe enemy, cette fonction existe ?
    Sinon PilloBuenaGente c'est trompé,
    Encore... je vais arrêter là, je reviendrais quand je serais plus grand ! ^^

  11. #11
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Oui elle fait partie de la class enemy c'est pas une virtual fonction.

    et enemy hérite bien de personnage donc peu-être que cela vient de la déclaration du vecteur.

    mais pourquoi celui-ci doit être declaré comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector <Personnage *> persoTab;
    et non comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<enemy> persotab;

  12. #12
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Cela peut peut-être aider http://cpp.developpez.com/faq/cpp/?p...isme_inclusionBien comprendre cette notion rendra logique tout ça !

  13. #13
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Donc si j'ai bien suivi la fonction afficherinfo devrai être une fonction à laquelle on dit le type et qui affiche selon le type ?

  14. #14
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    donc si j'ai bien suivi la fonction afficherinfo devrai etre un fonction auquel on dis le type et qui affiche le selon le type ?
    J'ai pas tout saisi.
    Déjà pourquoi afficherinfo ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cout<<"Nom du personnage : " << personnage[numero].nom()<<endl;
    cout<<"Level  : " << personnage[numero].level()<<endl;
    cout<<"Vie : " << personnage[numero].live()<<endl;
    Ici tu peux afficher ces information, que personnage soit personnagejoueur ou enemy.

  15. #15
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Je ne sais pas moi non plus car vous avez parler de polymorphisme par rapport au tableau du coup j'ai regarder le lien mais voila j'ai pas trop compris pourquoi le polymorphisme avec mon tableau

  16. #16
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Pour avoir un truc qui ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sdt::vector < Personnage * > tab;
     
    tab.push_back(enemy("guepe", 50, 0, "poison", 10, 5));
    tab.push_back(personnageJoueur());
     
    tab[0]->attaque( tab[1] );
    PS Je ne suis pas sûr, c'est peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab[0]->attaque( * tab[1] );
    Mais c'est l'idée !

  17. #17
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Donc même si je ne veux qu'un tableau d'enemy j'utiliserai vector<personnage * > et non vector<enemy> c'est ça qu'il y a comprendre ?

  18. #18
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    bon je repost le code commenter et si vous avez des questions poser les moi

    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
    #include <iostream>
    #include <vector>
    #include <cstdlib>
    #include <ctime>
    #include "personnage.h"
    #include "player.h" // heritage de la class personnage
    #include "enemy.h" // heritage de la class personnage
     
    using namespace std;
     
    int main()
    {
        srand(time(0));    //std::string nom = "guepe";
        player tidus("tidus");
        //enemy monstre("guepe", 50, 0, "poison", 10, 5);
        std::vector<enemy> monstre; // tableau d'ennemie uniquement
     
        int nbmonstre;
        while(nbmonstre == 0)
            nbmonstre  = rand() % 5; // genere un nombre d'ennemi
     
        for(int i = 0; i < nbmonstre; i++)
        {
            monstre.push_back(enemy("guepe", 50, 0, "poison", 10, 5)); // déclare les ennemie
        }
     
        int i = 0;
        while(i != nbmonstre)
        {
            //monstre[i]->afficheinfo();
            monstre[i].afficheinfo(); // affiche tout les info sur les ennemie
            //monstre(enemy.afficherinfo());
            //monstre[i].(enemy.afficherinfo());
            i++;
        }
     
        /*tidus.afficherinfo();
        monstre.afficherinfo();
     
        tidus.attaquer(monstre);
     
        tidus.afficherinfo();
        monstre.afficherinfo();
     
        tidus.attaquer(monstre);
     
        tidus.afficherinfo();
        monstre.afficherinfo();
        if(monstre.est_vivant() == false)
            monstre.~enemy();*/
     
        //monstre.afficherinfo();
     
     
        return 0;
    }
    le probleme est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\Documents and Settings\kbaes\Bureau\test\main.cpp||In function 'int main()':|
    C:\Documents and Settings\kbaes\Bureau\test\main.cpp|31|error: '__gnu_cxx::__alloc_traits<std::allocator<enemy> >::value_type' has no member named 'afficheinfo'|
    ||=== Build finished: 1 errors, 0 warnings (0 minutes, 1 seconds) ===|
    et se que je cherche a faire et un tableau d'ennemie uniquement et je veut pouvoir utiliser la methode afficherinfo() sur chacun des ennemies une fois créer dans le tableau

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

Discussions similaires

  1. Probleme insertion objet dans tableau
    Par Titiii25 dans le forum C++
    Réponses: 11
    Dernier message: 20/04/2009, 21h06
  2. probleme tableau
    Par semaj_james dans le forum C
    Réponses: 3
    Dernier message: 24/11/2005, 11h55
  3. [Tableaux] Probleme tableau
    Par chocobos dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2005, 11h34
  4. tableau objet
    Par harris_macken dans le forum C++
    Réponses: 9
    Dernier message: 20/06/2005, 21h04
  5. [C++] Probleme tableau
    Par yanndublanche dans le forum C++
    Réponses: 9
    Dernier message: 21/10/2004, 16h42

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