Может кто-нибудь объяснить, почему следующий код недействителен? Это потому, что смещение для переменной с именем d
отличается от смещения переменной с именем b
?
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 ++ Comeau:
"ComeauTest.c", line 12: error: a reference of type "Base *&" (not const-qualified)
cannot be initialized with a value of type "Derived *"
DoSomething( d );
^
Это похожий вопрос, но отличается, потому что в моем примере я объявляю d
как тип указателя: Передача ссылок на указатели в C ++
Обратите внимание, что это компилируется, когда я передаю b
в DoSomething
.