Im unten stehenden Code kann ich nicht herausfinden, warum der Aufruf von "apply" als mehrdeutig gemeldet wird. Es gibt nur eine akzeptable Übereinstimmung für den angegebenen Parameter (A_applicator::apply
). Hinweis: Ich würde sehr gerne Verweise auf den Standard schätzen, die mir helfen würden, den Auflösungsfluss zu bestimmen, der diese Mehrdeutigkeit verursacht.Warum ist dieser virtuelle Anruf mehrdeutig?
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);
}
Sie haben eine Klasse, die von zwei Basisklassen abgeleitet ist, die 'apply()' nicht überschreibt. Ein virtueller Aufruf, der versucht, den Vererbungsbaum zu durchsuchen und zwei oder mehr realisierbare Optionen zu erfüllen, ist ungültig. Da ist deine Zweideutigkeit. – CodaFi
Tatsächlich habe ich meine 'using' Klauseln vergessen. Vielen Dank. –