Forum de la communauté SFML

Aide => Général => Discussion démarrée par: Platon le Février 26, 2015, 06:05:05 pm

Titre: Impossible de faire passer un this en argument
Posté par: Platon le Février 26, 2015, 06:05:05 pm
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

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

void UnitTower::update(){ Shoot shoot(this) }
le constructeur de l'objet qui récupère l'autre

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

Shoot::Shoot(UnitTower* tOwer)
{
tower = tOwer;
}

Je vous remercie d'avance et je continue à chercher ;)

Cdlm,

Phobizeur
Titre: Re : Impossible de faire passer un this en argument
Posté par: S66 le Février 26, 2015, 06:22:22 pm
Shoot(UnitTower*); dans le .h et
Shoot::Shoot(UnitTower* tOwer) dans le .cpp.
Comme c'est bizarre.
Titre: Re : Impossible de faire passer un this en argument
Posté par: Platon le Février 26, 2015, 06:34:48 pm
C'est à dire ?
Je ne vois pas, je suis vraiment bloquée ^^
Titre: Re : Impossible de faire passer un this en argument
Posté par: victorlevasseur le Février 26, 2015, 06:39:19 pm
Quelle est l'erreur ?

(Aussi, ce n'est pas un problème lié à la SFML...)
Titre: Re : Impossible de faire passer un this en argument
Posté par: Platon le Février 26, 2015, 06:44:18 pm
Voici l'erreur exacte :

1>UnitTower.cpp(46): error C2664: 'Shoot::Shoot(const Shoot &)' : cannot convert argument 1 from 'UnitTower' to 'const Shoot &'
1>          Reason: cannot convert from 'UnitTower' to 'const Shoot'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Merci à vous pour votre patiente.
Titre: Re : Impossible de faire passer un this en argument
Posté par: S66 le Février 28, 2015, 09:37:58 am
Hum... quand même pas compliqué, il peut pas convertir un unitower en shoot.
Titre: Re : Impossible de faire passer un this en argument
Posté par: kimci86 le Février 28, 2015, 12:00:23 pm
Si on simplifie davantage le code que tu donnes, il apparaît que le code suivant serait à l'origine du problème.
Pourtant, ce code est licite est compilé sans problème. Le problème doit venir d'ailleurs. Tu peux essayer de simplifier ton code jusqu'à qu'il soit valide pour déterminer la source du problème.

class UnitTower;

class Shoot
{
        public:
                Shoot(UnitTower* tower)
                 : tower(tower)
                {}

        protected:
                UnitTower* tower;
};

class UnitTower
{
        public:
                void update()
                {
                        Shoot shoot(this);
                }
};

int main()
{
        return 0;
}
Titre: Re : Impossible de faire passer un this en argument
Posté par: victorlevasseur le Février 28, 2015, 12:34:31 pm
Il y a deux fois tower (en argument du constructeur et en attribut), ça ne va pas poser de problèmes ?
Titre: Re : Impossible de faire passer un this en argument
Posté par: kimci86 le Février 28, 2015, 01:54:30 pm
Il y a deux fois tower (en argument du constructeur et en attribut), ça ne va pas poser de problèmes ?
Non, ça ne pose pas de problème.
Tu peux trouver une explication ici (http://en.cppreference.com/w/cpp/language/initializer_list).