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++

  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.

  7. #7
    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
    Merci pour ton aide, par contre ma syntaxe n'est toujours pas bonne je pense x) :

    Code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::reference_wrapper<const Item> const &items[]
    Erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ||=== Build: Release in app-MAJ-10.16 (compiler: GNU GCC Compiler) ===|
    D:\Code\Workspace\app-MAJ-10.16\comparator.hpp|35|error: declaration of 'items' as array of references|
    D:\Code\Workspace\app-MAJ-10.16\comparator.cpp|3|error: declaration of 'items' as array of references|
    D:\Code\Workspace\app-MAJ-10.16\comparator.cpp||In constructor 'Comparator::Comparator(...)':|
    D:\Code\Workspace\app-MAJ-10.16\comparator.cpp|3|error: 'items' was not declared in this scope|
    D:\Code\Workspace\app-MAJ-10.16\comparator.cpp|3|error: no matching function for call to 'Item::Item()'|
    D:\Code\Workspace\app-MAJ-10.16\Item.hpp|19|note: candidate: Item::Item(const Item&)|
    D:\Code\Workspace\app-MAJ-10.16\Item.hpp|19|note:   candidate expects 1 argument, 0 provided|
    D:\Code\Workspace\app-MAJ-10.16\Item.hpp|14|note: candidate: Item::Item(std::__cxx11::string, short unsigned int, bool, int, int, short int, int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int)|
    D:\Code\Workspace\Dofus\Item.hpp|14|note:   candidate expects 43 arguments, 0 provided|
    ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
    Ps :
    J'ai vu aussi ce code sur cpp mais ça ne fonctionne pas non plus x)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template <class T>
    reference_wrapper<const T> cref (const T& elem) noexcept;

  8. #8
    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
    My bad je pensais que vector ne copiais pas les réferences.
    Du coup tu pourrais utiliser les pointeurs mais vois plutôt la solution de Bousk, si il y a un truc fait pour ça autant l'utiliser.

  9. #9
    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
    Moi et les pointeur ça fait deux ^^" même si des fois je suis obligé d'utiliser des pointeurs intelligents j'essaye d'avoir un code sans aucun pointeurs nul part !

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Utilise un std::reference_wrapper, mais... stocke le dans un std::vector!!! quelque chose comme std::vector<std::reference_wrapper<const Item>> nomDuTableau;Au pire, tu peux envisager de créer un (ou deux) alias de type, pour faciliter l'écriture, sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* si cela t'ennuie de devoir écrire std::reference_wrapper<Item const > à chaque fois */
    using wrapper_t = std::reference_wrapper<Item const;
    /* et pour le vecteur */
    using wrap_tab = std::vector<std::reference_wrapper<Item const &>>;
    /* ou, si tu as défini wrapper_t */
    using wrap_tab = std::vector<wrapper_t>;
    Quant à la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <class T>
    reference_wrapper<const T> cref (const T& elem) noexcept;
    et à son homologue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <class T>
    reference_wrapper< T> ref ( T& elem) noexcept;
    Elles existent déjà dans la bibliothèque standard, et permettent de créer des référence wrapper sur base d'un élément donné (en référence) à la fonction.
    La différence entre les deux, c'est que la référence contenue dans le std::reference_wrapper est constante avec cref, alors qu'elle ne l'est pas avec ref

    Ceci dit, l'héritage n'est effectivement pas la solution à ton problème d'origine, car on ne peut décemment pas dire que "un comparateur (d'items) EST un item". Je crois que tu sera d'accord avec moi sur ce point.

    Mais, comme la grosse majorité des données membres de Item sont déjà constante (et donc, non modifiables), il est peut être intéressant de se poser la question du risque que l'on encours en les déclarant, tout simplement, dans l'accessibilité publique.

    De mon avis, le risque est quasi nul, et ce d'autant plus que tu t'apprète à en stocker une référence... constante (qui t'empêchera donc de modifier "les quelques données non constantes qui restent".

    Maintenant, si tu ne veux vraiment pas envisager ta classe Item comme... un agrégat de données comme on en crée depuis des dizaines d'années (déjà bien avant l'arrivée de C), et que tu tiens à les laisser dans l'accessibilité privée, il te reste toujours la possibilité de déclarer ton comparateur ami de la classe Item. Cela lui donnera -- et à lui seul -- l'accès à l'ensemble du contenu de la classe Item, sans rien exposer au "reste du monde".
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    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 bel et bien mit en place ta solution, mais j'obtiens toujours des erreurs :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ||=== Build: Release in Dofus (compiler: GNU GCC Compiler) ===|
    D:\Code\Workspace\Dofus\comparator.cpp||In constructor 'Comparator::Comparator(const wrap_tab&)':|
    D:\Code\Workspace\Dofus\comparator.cpp|3|error: no matching function for call to 'Item::Item()'|
    D:\Code\Workspace\Dofus\Item.hpp|19|note: candidate: Item::Item(const Item&)|
    D:\Code\Workspace\Dofus\Item.hpp|19|note:   candidate expects 1 argument, 0 provided|
    D:\Code\Workspace\Dofus\Item.hpp|14|note: candidate: Item::Item(std::__cxx11::string, short unsigned int, bool, int, int, short int, int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int)|
    D:\Code\Workspace\Dofus\Item.hpp|14|note:   candidate expects 43 arguments, 0 provided|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
    Je ne comprend pas pourquoi il veut utiliser le constructeur par défaut de Item ?

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Si Comparator hérite de Item. Il doit, pour se construire, construire un Item d'où le constructeur par défaut.
    Comparator ne doit pas hériter de Item, cela n'a pas de sens.
    Pour que Comparator accède aux éléments protected il faut :
    * que Item fournisse une méthode publique faisant la comparaison;
    * ou bien considérer que Comparator est un élément fortement lié à Item et le déclarer ami en mettant dans Item : friend class Comparator;.

  13. #13
    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
    Merci beaucoup pour cette réponse !
    Héhé ^^" j'ai encore une erreur tout de même :p qui vient de functional.hpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      In instanciation of 'class std::reference_wrapper<const Item&>':
    3 required from here
    functional.hpp 401 error : forming pointer to reference type 'const Item&'
                        410 error : 'std::reference_wrapper<_Tp>::reference_wrapper(_Tp&&) [with _Tp = const Item&]' cannot be overloaded
                        406 error : with 'std::reference_wrapper<_Tp>::reference_wrapper(_Tp&&) [with _Tp = const Item&]'
    Build failed 3 errors.

  14. #14
    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
    Et l'erreur complète est ?
    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.

  15. #15
    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 Bousk Voir le message
    Et l'erreur complète est ?
    Et bien il y a juste ça dans les build messages de CB pourquoi ?

  16. #16
    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
    with _Tp = const Item&
    tu as surement écrit reference_wrapper<const Item&> alors que la syntaxe c'est reference_wrapper<const Item> ou même reference_wrapper<Item> puisque le const est déjà en dehors sur le vector.
    Koala a copié un peu vite, et tu as recopié sans regarder/réfléchir.

    Et si on demande toutes les erreurs c'est parce que ça peut venir d'ailleurs, et ça ne se réduit surement pas à ces 3 lignes seules. Il manque au moins l'information du code appelant où l'erreur a été rencontrée. Peut-être des erreurs antérieures ou postérieures aussi.
    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.

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello

    Ca serait plus efficace pour toi de faire un petit effort et de lire de la doc plutôt que d'appliquer aveuglément les suggestions. Il faut que tu comprennes ce que tu fais.

  18. #18
    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 Bousk Voir le message
    with _Tp = const Item&
    tu as surement écrit reference_wrapper<const Item&> alors que la syntaxe c'est reference_wrapper<const Item> ou même reference_wrapper<Item> puisque le const est déjà en dehors sur le vector.
    Koala a copié un peu vite, et tu as recopié sans regarder/réfléchir.

    Et si on demande toutes les erreurs c'est parce que ça peut venir d'ailleurs, et ça ne se réduit surement pas à ces 3 lignes seules. Il manque au moins l'information du code appelant où l'erreur a été rencontrée. Peut-être des erreurs antérieures ou postérieures aussi.
    Et bien en faite j'ai lu la doc et donc je n'est pas mit & mais j'ai eu encore des erreurs et du coup j'ai essayer avec mais forcément cela ne fonctionner pas non plus. Puis par la suite j'ai compris que j'avais fait une petire erreur sur ma classe donc maintenant tout est bon merci à vous ! ^^

    l'erreur que j'avais pas bien regardé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ||=== Build: Release in test (compiler: GNU GCC Compiler) ===|
    D:\Code\Workspace\test\Item.hpp||In constructor 'Item::Item(std::__cxx11::string, short unsigned int, bool, int, int, short int, int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int, short int)':|
    D:\Code\Workspace\test\Item.hpp|30|warning: 'Item::item_stats' will be initialized after [-Wreorder]|
    D:\Code\Workspace\test\Item.hpp|27|warning:   'const string Item::item_name' [-Wreorder]|
    D:\Code\Workspace\test\Item.cpp|3|warning:   when initialized here [-Wreorder]|
    D:\Code\Workspace\test\Item.cpp||In member function 'Stat& Item::stats()':|
    D:\Code\Workspace\test\Item.cpp|17|error: binding 'const Stat' to reference of type 'Stat&' discards qualifiers|
    ||=== Build failed: 1 error(s), 3 warning(s) (0 minute(s), 2 second(s)) ===|

+ 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