В C++ множественное наследование с виртуальной базой Я понимаю, почему этот код может быть неоднозначным, но почему он все еще жалуется, когда я специально вызываю метод производного класса?множественное виртуальное наследование в C++ жалуется на вызов определенной функции
class A {
public:
virtual void f() { cout << 1 ;}
};
class B :virtual public A {
public:
virtual void f() { cout << 2; }
};
class C :virtual public A {
public:
virtual void f() { cout << 3; }
};
class D : public B, public C {};
void main(){
D* d = new D();
d->B::f();
getch();
}
я бы ожидать, что он будет работать B: F() метод, но я получаю: «неоднозначное наследие Пустоты A :: f (пустоте) '
Вы испытываете то, что известно как 'Алмазные Наследование задаче' .. http://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem – Brandon
Это то, что вы пытаетесь назвать это специфическая функция не фиксирует сам класс D. – Mat
@OP, я просто подумал, что хочу указать на это. 'Main' в C и C++ - НИКОГДА' void'. Пожалуйста, измените его, чтобы вернуть 'int'. Меня это действительно беспокоит. – Brandon