Следующий код не будет компилироваться:
class A {
public:
A(int) {}
};
class B: virtual public A {
public:
B(): A(0) {}
};
// most derived class
class C: public B {
public:
C() {} // wrong!!!
};
Если я вызываю A
конструктор в C
список инициализации конструктора, то есть:
// most derived class
class C: public B {
public:
C(): A(0) {} // OK!!!
};
он работает.
По-видимому, причина в том, что виртуальные базовые классы всегда должны быть построены с помощью большинства производных классов.
Я не понимаю причину этого ограничения.