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 :

Impossible de faire passer un this en argument


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut Impossible de faire passer un this en argument
    Bonjour,

    Je rencontre actuellement un problème bloquant dont je ne trouve pas la solution, le but qu'un objet puisse envoyer un this ( donc un pointer vers lui même ) à un autre objet ( via son constructeur ) en argument.

    voici ce que j'ai essayé en version simplifié qui ne fait apparaitre que le code du problème :

    UnitTower.h

    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
    class UnitTower
    {
    public:
    	UnitTower();
    	~UnitTower();
    	sf::Sprite getSprite();
    	void update();
    	void setTarget(UnitMobile);
    	UnitMobile getTarget();
     
    protected:
    	UnitMobile cible;
    	sf::Texture texture;
    	sf::Sprite sprite;
    };
    Une fonction dans le UnitTower.cpp qui doit crée un objet et envoyer un pointer de lui même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void UnitTower::update(){ Shoot shoot(this) }
    le constructeur de l'objet qui récupère l'autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Shoot
    {
    public:
    	Shoot(UnitTower*);
    	~Shoot();
    	void fire();
     
    protected:
    	sf::Texture texture;
    	sf::Sprite sprite;
    	int dommage;
    	UnitTower* tower;
    	sf::Clock clock;
    };
    Et son Shoot.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Shoot::Shoot(UnitTower* tOwer)
    {
    	tower = tOwer;
    }
    Je vous remercie d'avance et je continue à chercher

    Cdlm,

    Phobizeur

  2. #2
    Membre éprouvé Avatar de KsassPeuk
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Juillet 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 138
    Par défaut
    Lu'!

    Et donc c'est quoi l'erreur ?

    Deux trucs au passage quand même :
    • changer la casse d'un caractère dans le mot pour lever une amibguité ça promet des jolis fails sur les fautes de frappes
    • c'est normal que la cible soit modifiée en recevant une copie ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut
    L'erreur :

    1>UnitTower.cpp(46): error C2664: 'Shoot::Shoot(const Shoot &)' : cannot convert argument 1 from 'UnitTower *const ' to 'const Shoot &'
    Pourtant c'est tout simple, lorsque je crée Shoot shoot(this), je veux récupérer la tower pour avoir ses variables dans shoot.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    A priori, le code que tu montres n'est pas celui qui a levé l'erreur.
    Nettoie ton projet (clean) et recommence.

    Par ailleurs, utilise la liste d'initialisation du constructeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shoot::Shoot(UnitTower* tower) : tower(tower) {}
    le tower en rouge est le nom du champ, dans la classe.

    Seule la liste d'initialisation est capable de remplir les champs constants et les références.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut
    J'ai viens d’essayer avec la liste d'initialisation et j'ai toujours la même erreur sauf que j'ai plus de détail ^^"

    Le détail :

    Reason: cannot convert from 'UnitTower *const ' to 'const Shoot'
    Je ne vois pas pourquoi ça ne marche pas !

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Visiblement, tu essaye de passer à ton constructeur un pointeur constant sur une UnitTower, alors qu'il s'attend à avoir un pointeur non constant. Donc soit tu n'as pas besoin de modifier la UnitTower depuis la classe Shoot, et tu prend en paramètre un pointeur constant que tu stockes dans un pointeur constant, soit la modification est requise, et dans ce cas là, il faut passer un pointeur non constant au constructeur.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Faire passer un argument dans un script sql
    Par Dodo86 dans le forum Pentaho
    Réponses: 3
    Dernier message: 31/03/2010, 14h20
  2. Réponses: 4
    Dernier message: 22/02/2010, 22h45
  3. Impossible de faire passer mon DataContext ! Une idée ?
    Par Cvbdev dans le forum Windows Communication Foundation
    Réponses: 4
    Dernier message: 07/02/2010, 23h30
  4. Faire passer des arguments via window.open()
    Par juanqui dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 22/02/2007, 19h27
  5. Réponses: 5
    Dernier message: 08/03/2004, 10h28

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