В приведенном ниже коде я не могу понять, почему вызов «применить» сообщается как неоднозначный. Существует только одно приемлемое соответствие для предоставленного параметра (A_applicator::apply
). Примечание. Я бы очень ценю ссылки на стандарт, который поможет мне определить поток разрешения, вызывающий эту двусмысленность.Почему этот виртуальный вызов неоднозначен?
struct A { };
struct B { };
struct A_D : public A { };
struct A_applicator {
virtual void apply(A) { }
};
struct B_applicator {
virtual void apply(B) { }
};
struct dual_applicator : public B_applicator, public A_applicator {
};
int main() {
dual_applicator app;
A_D d;
app.apply(d);
}
У вас есть класс, который получен из двух базовых классов, которые не переопределяют 'apply()'. Виртуальный вызов, который пытается найти дерево наследования и отвечает двум или более жизнеспособным параметрам, недействителен. Есть ваша двусмысленность. – CodaFi
Действительно, я забыл свои предложения 'using'. Спасибо. –