У меня есть вопрос о вызове функции с виртуальными методами и множественным наследованием. у меня есть следующий код:виртуальные таблицы и наследование C++
#include<iostream>
using namespace std;
class A{};
class B:public A{};
class C:public B{};
class AA:public A{};
struct X
{
void f(A*) { std::cout<< "X::f(A*)\n";}
virtual void f(B*) { std::cout<< "X::f(B*)\n";}
void f(C*) { std::cout<< "X::f(C*)\n";}
virtual void f(C*) const { std::cout<< "const X::f(C*)\n";}
};
struct Y:public X {
virtual void f(B*) { std::cout<< "Y::f(B*)\n";}
void f(A*) { std::cout<< "Y::f(A*)\n";}
virtual void f(C*) const { std::cout<< "const Y::f(C*)\n";}
};
int main() {
Y* y=new Y();
y->f(new C);
}
Я не могу понять, почему это получается неоднозначным и есть 2 кандидата:
Y::f(B*)
Y::f(C*)
Где же это получается неоднозначным ? –
, когда я пытаюсь скомпилировать код. – user3286882
Что это связано с множественным наследованием? Каждый из ваших классов/структур наследуется от одного класса/структуры. – andrjas