Pourquoi une erreur de compilation se produit-elle lorsque j'appelle une fonction de classe de base avec un pointeur sur un pointeur vers une classe héritée?Héritage et pointeurs vers des pointeurs: pourquoi cela ne fonctionne-t-il pas et comment le contourner?
Exemple:
class cFoo {};
class cBar : public cFoo {};
void func1(cFoo *) {} // base class
void func2(cFoo **) {} // base class
void main(void)
{ cBar bar, *pbar; // inherited class
func1(&bar); // compiles OK
func2(&pbar); // fail
func2(dynamic_cast<cFoo**>(&pbar)); // 'class cFoo ** ' : invalid target type for dynamic_cast
}
Comment puis-je contourner cela?
N'est-ce pas prendre l'adresse d'un temporaire? Est-ce vraiment autorisé? –
@Ands qu'en est-il de 'dynamic_cast' alors? –