Вот мои занятия. Это простоМножественное наследование без переопределения функции. Почему двусмысленность
#include<iostream>
using namespace std;
class Base
{
public:
int var;
Base(int val) : var(val)
{}
void foo()
{
cout << "Class Base foo()" << endl;
}
};
class Derived_A : public Base
{
public:
Derived_A(int val) : Base(val)
{}
};
class Derived_B : public Base
{
public:
Derived_B(int val) : Base(val)
{}
};
class Derived_AB : public Derived_A, public Derived_B
{
public:
Derived_AB(int var1, int var2) : Derived_A(var1), Derived_B(var2)
{}
};
int main(int argc, char** argv)
{
Derived_AB ABDerObj(1,2);
ABDerObj.foo();
return 0;
}
И это дает мне ошибку компилятора говоря, вызов Foo неоднозначно.
Функция foo не переопределяется нигде. Я понимаю, что есть два экземпляра класса Base, потому что виртуального наследования нет. Таким образом, есть две переменные var. Но я не понимаю, почему компилятор имеет двусмысленность в вызове foo. Функции не зависят от экземпляра. Они относятся к классу. Почему компилятор дает сообщение об ошибке?
Я использую Visual Studio 2013.
Спасибо.
Это то, на что наследулось «виртуальное» наследование в текущем стандарте. –
«Функции не специфичны для конкретного экземпляра» - вы ошибаетесь, они есть. –