Я изучаю теперь различные ситуации двусмысленности в виртуальном деривации на C++. Но у меня есть ошибка неоднозначности в моем коде, и я не понимаю, что это причина ...виртуальный вывод и преобразование неоднозначный
Вот мой код:
class V {
public:
int v ;
};
class A {
public:
int a ;
};
class B : public A, public virtual V {
};
class C : public A, public virtual V {
};
class D : public B, public C {
public:
void f() ;
};
void g() {
D d ;
B* pb = &d ; // No Problem
A* pa = &d ; // Error: 'A' is ambiguous base of 'D'
V* pv = &d ; // No Problem
}
Я не понимаю, почему у меня эта ошибка, однако, у меня нет ошибок для других аффектов.
Спасибо :-)
Спасибо. Но оба они унаследованы от А. Итак, в чем проблема с этой аффектацией? Спасибо – Copernic
@Mehdi - D * не может * наследовать два экземпляра A. Подумайте об этом - если A содержит общедоступное свойство «a», то оба B и C имеют свойство «a». Теперь D имеет два свойства «a» - какой должен использовать компилятор? Он не может просто объединить их - это не так просто. Вот почему он не может скомпилировать. – Alain
Aaah. Теперь я понимаю! большое спасибо @Alain :) – Copernic