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 :

Héritage, class comparator et item


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut Héritage, class comparator et item
    Bonjour à tous
    Actuellement je code un petit comparateur d'items pour un jeu. Seulement j'ai un petit problème. J'ai deux classes, la classe Item et la classe Comparator.

    item.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
     
    #ifndef Item_included
    #define Item_included
     
    #include <iostream>
     
    #include "stat.hpp"
     
    enum ItemType{ Hat, Mantle, Weapon, Weapon2hand, Boots, Amulet, Ring, Bag, Belt, Mount, Pet, Dofus, Trophy }; /// incin enum
     
    class Item
    {
    public:
     
        Item( std::string name, unsigned short level, bool isInPanoply = false, int v = 0, int i = 0, short w = 0, int we = 0, short e = 0, short f = 0, short wa = 0, short a = 0, short p = 0
             , short ac = 0, short m = 0, short pr = 0, short r = 0, short in = 0, short d = 0, short dn = 0, short de = 0, short df = 0, short dw = 0, short da = 0, short dc = 0, short dp = 0
             , short rn = 0, short re = 0, short rf = 0, short rw = 0, short ra = 0, short rfn = 0, short rfe = 0, short rff = 0, short rfw = 0, short rfa = 0, short apr = 0, short mpr = 0
             , short apd = 0, short mdp = 0, short h = 0, short ch = 0, short t = 0, short l = 0 );
     
        Item( Item const &item );
     
    private:
     
        std::string const item_name;
        unsigned short const item_level;
        bool item_isInPanoply;
        Stat const item_stats;
     
    };
     
    #endif // Item_included
    comparator.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
    46
    47
     
    #include <vector>
     
    //enum Comparable{ Hat, Mantle, Belt, Weapon, Boots, Amulet, Ring, Ring2, Mount, slot1, slot2, slot3, slot4, slot5, slot6 };
    #include "WeightRunes.hpp"
    #include "Item.hpp"
     
    struct Stuff
    {
        Stuff( Item &ht, Item &mntl, Item &blt, Item &weap, Item &bts, Item &amu, Item &rng, Item &rng2, Item &mnt, Item &slt1, Item &slt2, Item &slt3, Item &slt4, Item &slt5, Item &slt6 ) :
              hat{ht}, mantle{mntl}, belt{blt}, weapon{weap}, boots{bts}, amulet{amu}, ring{rng}, ring2{rng2}, mount{mnt}, slot1{slt1}, slot2{slt2}, slot3{slt3}, slot4{slt4}, slot5{slt5}, slot6{slt6}{}
        Item const hat;
        Item const mantle;
        Item const belt;
        Item const weapon;
        Item const boots;
        Item const amulet;
        Item const ring;
        Item const ring2;
        Item const mount;
        Item const slot1;
        Item const slot2;
        Item const slot3;
        Item const slot4;
        Item const slot5;
        Item const slot6;
    };
     
    class Comparator
    {
    public:
     
        Comparator( std::vector<Item> const &items );
        Comparator();
        Item compare( Item const &a, Item const &b ); /// test
     
    private:
     
        //Item compare( Item const &a, Item const &b );
        unsigned int score( Item const &item );
     
        std::vector<Item> const comparator_items;
        //Stuff comparator_stuff;
     
    };
     
    #endif // Comparator_included
    Le problème est assez visible, le constructeur de comparator va effectuer une copie d'un vecteur d'Item, or, les attributs de items sont private. Donc faut-il que je mettent ses attributs en protected et Comparator en héritage d'Item ? Cela ne me paraît pas correct car Comparator n'est pas censé hériter d'Item vu que son rôle est de comparer des items puis de créer une panoplie d'items.

    Edit : En attendant j'ai déjà tester avec protected et comparator en héritage d'item et j'ai cette erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    D:\Code\Workspace\app151016\comparator.cpp|3|error: no matching function for call to 'Item::Item()'|
    Si je comprend bien il a besoin du constructeur par défaut pour copier un vecteur ?
    Et je ne peux toujours pas pour accéder aux éléments protected :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    D:\Code\Workspace\app151016\Item.hpp||In member function 'unsigned int Comparator::score(const Item&)':|
    D:\Code\Workspace\app151016\Item.hpp|26|error: 'const Stat Item::item_stats' is protected|
    D:\Code\Workspace\app151016\comparator.cpp|18|error: within this context|
    D:\Code\Workspace\app151016\Item.hpp|26|error: 'const Stat Item::item_stats' is protected|
    D:\Code\Workspace\app151016\comparator.cpp|19|error: within this context|
    D:\Code\Workspace\app151016\Item.hpp|26|error: 'const Stat Item::item_stats' is protected|
    D:\Code\Workspace\app151016\comparator.cpp|20|error: within this context|
    ....
    ||=== Build failed: 21 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
    En attente de vos réponses ,
    Cordialement, Disixlis.

  2. #2
    Membre actif Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Par défaut
    Yo !

    Pour moi tu devrais plutôt stocker une const & dans ton vector au lieu de faire une copie de ton item, tu gagnera en mémoire au passage et le problème de copie devrait disparaître.
    Pour l'accès à ton item_stats, vois avec une méthode du style getItemStats dans ta class Item, ça te permettra d'y accèder depuis ton vecteur sans problème.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Citation Envoyé par Waether Voir le message
    Yo !

    Pour moi tu devrais plutôt stocker une const & dans ton vector au lieu de faire une copie de ton item, tu gagnera en mémoire au passage et le problème de copie devrait disparaître.
    Pour l'accès à ton item_stats, vois avec une méthode du style getItemStats dans ta class Item, ça te permettra d'y accèder depuis ton vecteur sans problème.
    Je n'avais pas fait de vector const & car je pensais à chaque fois stocker tout dans le vecteur du comparator, mais par contre n'ayant jamais fait ça, mon vecteur doit ressembler à ça du coup ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<const &Item> const &items;
    Et pour ce qui en est des get c'est déjà corrigé ^^" ( Stat &stats() const; )

  4. #4
    Membre actif Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Par défaut
    Ca aura exactement le même comportement si ce n'est que tu ne pourra pas modifier ton Item.
    SInon la syntaxe est bonne.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    J'ai essayer avec cette syntaxe mais cela n'as pas l'air de marcher ^^"
    Code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<const &Item> const & items;
    Erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ||=== Build: Release in Dofus (compiler: GNU GCC Compiler) ===|
    D:\Code\Workspace\Dofus\comparator.hpp|34|error: template argument 1 is invalid|
    D:\Code\Workspace\Dofus\comparator.hpp|34|error: template argument 2 is invalid|
    D:\Code\Workspace\Dofus\comparator.cpp|3|error: expected constructor, destructor, or type conversion before '(' token|
    D:\Code\Workspace\Dofus\comparator.cpp|4|error: expected unqualified-id before '{' token|
    ||=== Build failed: 14 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
    ps : Et non je ne souhaite pas modifié l'item donc c'est bien const x)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par défaut
    vector stocke une copie
    utilise std::reference_wrapper
    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.

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

Discussions similaires

  1. problème (héritage || class || constructeur )?
    Par crazy_inf dans le forum C++
    Réponses: 3
    Dernier message: 29/06/2008, 22h07
  2. Héritage, classe virtuelle
    Par Anium dans le forum C++
    Réponses: 3
    Dernier message: 21/05/2008, 09h18
  3. Héritage, classe de base
    Par Melem dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 25/02/2008, 15h45
  4. Héritage classe template->classe template
    Par zabibof dans le forum Langage
    Réponses: 5
    Dernier message: 11/08/2007, 11h05
  5. Réponses: 5
    Dernier message: 10/01/2007, 02h08

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