Bonjour à tous,

J'ai le code suivant avec une classe Daughter qui dérive d'une classe Mother, et une fonction qui prend comme argument une référence de pointeur de Daughter. La fonction doit en effet changer l'adresse de l'objet Daughter passé en paramètre en fournissant une adresse de Daughter récupérée depuis un pool de Daughter:
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
class Mother
{
public:
	Mother() {attrMother = 0;}
private:
	int attrMother;
};
 
class Daughter : public Mother
{
public:
	Daughter() {attrDaughter = 1;}
private:
	int attrDaughter;
};
 
void refpointerfunction(Daughter*& param)
{
}
 
int main()
{
	Mother* objM;
	refpointerfunction((Daughter*)objM); //error C2664: 'refpointerfunction'*: impossible de convertir le paramètre 1 de 'Daughter *' en 'Daughter *&'
	refpointerfunction((Daughter*&)objM); //ça passe
}
Vous allez surement me dire que mon code n'est propre, mais d'une part je dois utiliser un objet de type Mother pour une question de généricité du code, et d'autre part la fonction refpointerfunction() ne peut pas prendre un objet de type Mother* en paramètre ce qui serait l'idéal bien sur.
Et je suis assuré que le type réel de objM est bien Daughter*, voilà pourquoi il n'y a pas de risque.

Le truc que je comprends pas, c'est pourquoi le 1er appel me sort une erreur de compil. Quand j'ai une fonction qui prend en paramètre un int&, je lui passe un int et il n'y a aucun problème.
Mais la je suis obligé de caster en référence de pointeur de Daughter, la cast en pointeur de Daughter ne suffit pas.

Si vous pouviez éclairer ma lanterne, merci par avance.