No matching function for call to 'class::method(Class* const)'
Drerrawyn
Messages postés
98
Statut
Membre
-
SypayV Messages postés 7399 Statut Contributeur -
SypayV Messages postés 7399 Statut Contributeur -
Bonjour, j'ai un problème, j'ai une méthode dans une classe qui permet de modifier l'objet qui appelle la méthode:
Ma methode die() appartient à un classe Entity dont héritent Bot et Cube:
J'ai l'erreur suivante:
Alors voilà, de ce que j'ai compris, le pointeur this que j'envoie est un Bot& const et ma fonction demande un Bot&. Mais comment je peux faire pour faire ce que je veux faire ? C'est à dire appeler une méthode d'un objet A qui agira sur l'objet B qui l'a appelé.
Bot appelle Cube.die() qui agis sur les membres du Bot qui l' a executé (enfin j'imagine que c'était assez clair avec le code hein mais bon ^^)
Merci pour votre aide future
bool Bot::mine(Cube &target, int amount) {
if(target.substrResistance(m_attack + amount)) // la methode substrResistance retourne true si le bloc est détruit
target.die(this);
} else
return false;
}
Ma methode die() appartient à un classe Entity dont héritent Bot et Cube:
void Entity::die(Entity &from) {
m_type = 1;
}
void Cube::die(Bot &from) {
Entity::die(from);
from.addScore(m_reward);
}
J'ai l'erreur suivante:
In member function 'bool Bot::mine(Cube&, int)':
no matching function for call to 'Cube::die(Bot* const)'
candidate is:
virtual void Cube::die(Bot&)
no known conversion for argument 1 from 'Bot* const' to 'Bot&'
Alors voilà, de ce que j'ai compris, le pointeur this que j'envoie est un Bot& const et ma fonction demande un Bot&. Mais comment je peux faire pour faire ce que je veux faire ? C'est à dire appeler une méthode d'un objet A qui agira sur l'objet B qui l'a appelé.
Bot appelle Cube.die() qui agis sur les membres du Bot qui l' a executé (enfin j'imagine que c'était assez clair avec le code hein mais bon ^^)
Merci pour votre aide future
A voir également:
- No matching function for call to 'class::method(Class* const)'
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Qwerty to azerty - Guide
- Wfp to mp4 - Forum Accessoires & objets connectés
- No signal tv - Guide
- No epg found - Forum Box et Streaming vidéo
2 réponses
Salut,
Il n'y a pas besoin de signaler la class d'origine dans les fonctions si les class sont en héritage.
La plus jeune fille aura toutes les variables public et protected
Edit : Ce qui veut dire, et ça saute aux yeux, dans la fonction die tu n'as pas besoin de la déclarer avec from puisque de toutes façons tu n'utilises même pas from dans la fonction. La variable qui sera changée sera celle de la class qui reçoit l'appel. Si tu veux que ce soit celle qui appel la fonction qui change son propre contenu, il n'y a même pas besoin de créer une fonction. Il suffit de remplacer target.die(this); par m_type = 1;
Il faut revoir la structure.
Musicalement,
SypayV.
Il n'y a pas besoin de signaler la class d'origine dans les fonctions si les class sont en héritage.
La plus jeune fille aura toutes les variables public et protected
Edit : Ce qui veut dire, et ça saute aux yeux, dans la fonction die tu n'as pas besoin de la déclarer avec from puisque de toutes façons tu n'utilises même pas from dans la fonction. La variable qui sera changée sera celle de la class qui reçoit l'appel. Si tu veux que ce soit celle qui appel la fonction qui change son propre contenu, il n'y a même pas besoin de créer une fonction. Il suffit de remplacer target.die(this); par m_type = 1;
Il faut revoir la structure.
Musicalement,
SypayV.
En fait j'ai copié un bout de code un peu vieux, c'est form->m_type = 1; à la place de m_type = 1;
En fait ce que je veux faire c'est que il y a plusieurs types de blocks, dont certains qui modifient les attributs, je peux toujours faire autrement, mais je pensais avoir une methode unique qui fasse des choses différentes (methode virtuelle) pour chaque type de block, enfin bon, je vais changer la conception du coup.
Merci
En fait ce que je veux faire c'est que il y a plusieurs types de blocks, dont certains qui modifient les attributs, je peux toujours faire autrement, mais je pensais avoir une methode unique qui fasse des choses différentes (methode virtuelle) pour chaque type de block, enfin bon, je vais changer la conception du coup.
Merci