Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/02/2012, à 14:15

Destroyers

[C++] problème tout simple sur les pointeurs (RESOLU)

bonjour tout le monde.

un problème très simple:

quelque part dans mon programme, j'instancie la classe arme via un pointeur:

arme *gun;
gun=new arme();

par la suite, je veux copier cette instance grâce a un constructeur de copie:

arme gun1(gun);

voici le prototype du constructeur de copie:

arme(arme const& a);

et voici l'erreur retournée:

personnage.cpp: In member function ‘void personnage::changer_arme()’:
personnage.cpp:210:24: erreur: no matching function for call to ‘arme::arme(arme*&)’
personnage.cpp:210:24: note: candidates are:
arme.h:22:2: note: arme::arme(const arme&)
arme.h:22:2: note:   no known conversion for argument 1 from ‘arme*’ to ‘const arme&’

(pour comprendre l'erreur il faut savoir que gun est un attribut de la classe personnage)

je me doutais bien qu'un pointeur (gun) ne pouvais pas être récupérée par référence constante (arme cont&)
mais alors, comment je peux récupérer un pointeur en argument ?

merci
(je doute de la clarté de mes explications ^^)

Dernière modification par Destroyers (Le 28/02/2012, à 16:59)

Hors ligne

#2 Le 24/02/2012, à 14:28

telliam

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

1ere chose
arme *gun;
n'instancie pas gun, tu créées juste un pointeur, il y a pas d'objet créé.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#3 Le 24/02/2012, à 14:43

Destroyers

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

effectivement, j'avais oublié wink j'ai modifié

Hors ligne

#4 Le 24/02/2012, à 15:27

Luc Hermitte

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

NB: tu ne veux pas copier des armes.
Il s'agit typiquement d'entités (sans parler que tu les manipules déjà via des pointeurs), et les entités on ne veut pas les copier. Non seulement c'est techniquement une source d'ennuis (je reste poli), mais surtout c'est un besoin que nous n'avons jamais : il n'y a aucune pertinence à faire cela.

mots clés -> sémantique entité, valeur
Un petit lien que j'ai sous le coude: http://akrzemi1.wordpress.com/2012/02/0 … semantics/

Hors ligne

#5 Le 24/02/2012, à 15:51

Destroyers

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

bon, alors voilà ce que je veux faire.
une instance arme est un attribut de la classe personnage (en gros, le personnage a une arme)
mon personnage a des armes aussi dans son inventaire (qui sont aussi des pointeurs)
lorsque je veux que mon personnage change d'arme, comment puis-je faire ?

voici ma méthode:
-je copie gun (qui est l'arme que le personnage a dans la main) grâce a un constructeur de copie (la copie s'appelle temp).
-je delete gun
-en suite, je fais pointer gun sur gun1 (qui est l'arme dans l'inventaire)
-je delete gun1
-je fais pointer gun1 sur temp.

si il y a une meilleur méthode... je prend

Dernière modification par Destroyers (Le 24/02/2012, à 15:51)

Hors ligne

#6 Le 24/02/2012, à 17:16

telliam

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

pourquoi tu fais pas pointer l'arme de ton personnage sur une des armes de l'inventaires ?


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#7 Le 24/02/2012, à 20:11

Destroyers

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

par ce que c'est la 1er fois que j'utilise réellement les pointeur et donc j'y ai même pas pensé x)
mais... je suis pas sur de savoir comment faire non plus ...

voici le code:

class personnage
{
    private:

        arme *gun;
        arme *gun1;

       public:
       personnage()
       {
              gun=new arme(); //dégats de l'arme: 10
              gun1=new arme(50); //dégats de l'arme: 50
       }

       changer_arme()
       {

       }
};

comment implémenter la méthode changer_arme() pour que gun devienne l'arme à 50 dégâts et que gun1 devienne l'arme à 10 dégâts  ?

Dernière modification par Destroyers (Le 24/02/2012, à 20:16)

Hors ligne

#8 Le 24/02/2012, à 20:21

Yezarath

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

Ce n'est qu'un avis personnelle ^^' pourquoi ne pas faire une arme général, avec deux attributs en entrée (nom de l'arme, dégâts), et après tu crée un fichier qui contient le nom et les dégâts de l'arme puis t'as juste a parser et foutre dans la méthode tongue, bon je suis néophyte x) mais j'aurais fais comme sa ! Bonne chance !

Hors ligne

#9 Le 24/02/2012, à 20:54

Destroyers

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

je sais pas ça me plaît pas. a la base je demande un truc simple x)
sa me semble inutile =O
je veux juste savoir comment implémenter ma méthode changer_arme() ^^

Hors ligne

#10 Le 24/02/2012, à 21:54

telliam

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

ben tu fais
arme* tmp = gun;
gun = gun1;
gun1 = tmp;


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#11 Le 25/02/2012, à 13:44

Destroyers

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

merci.
il faudrait pas delete tmp a la fin ?

Dernière modification par Destroyers (Le 25/02/2012, à 15:17)

Hors ligne

#12 Le 25/02/2012, à 17:09

yoones

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

Ton constructeur attend une référence, tu lui passes un pointeur. As-tu essayé de déréférencer ton pointeur avant de le passer au constructeur ?

arme *gun;
gun=new arme();
arme gun1(*gun);

Hors ligne

#13 Le 25/02/2012, à 22:12

Destroyers

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

ah oui en effet, cela marche smile
merci.

@telliam
il faudrait pas delete tmp a la fin ?

Hors ligne

#14 Le 26/02/2012, à 22:09

Haleth

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

arme* tmp = gun;
gun = gun1;
gun1 = tmp;

Si tu fait un free(tmp) à la fin, tu aura detruit ton unique object.
Note que, dans ces 3 lignes, tu n'as pas fait de new/malloc -> tu n'as qu'un item.


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#15 Le 26/02/2012, à 22:20

Destroyers

Re : [C++] problème tout simple sur les pointeurs (RESOLU)

ah oui effectivement.
merci tout le monde smile

Hors ligne