Quelqu'un peut-il expliquer pourquoi le code suivant n'est pas valide? Est-ce parce que le décalage de la variable d
est différent de la variable b
?Erreur d'appel de la fonction et passage d'une référence à un pointeur avec un type dérivé
class Base { public: int foo; };
class Derived : public Base { public: int bar; };
int DoSomething(Base*& b) { return b->foo; }
Base* b = new Derived;
Derived* d = new Derived;
int main()
{
DoSomething(d);
}
C'est l'erreur qui the online Comeau C++ compiler donne:
"ComeauTest.c", line 12: error: a reference of type "Base *&" (not const-qualified)
cannot be initialized with a value of type "Derived *"
DoSomething(d);
^
C'est une question similaire, mais est différent parce que, dans mon exemple, je déclare d
comme un type de pointeur: Passing references to pointers in C++
Remarque que cela compile quand je passe b
à DoSomething
.