Nel seguente codice non riesco a capire perché la chiamata a "applicare" sia segnalata come ambigua. Esiste una sola corrispondenza accettabile per il parametro fornito (A_applicator::apply
). Nota Apprezzerei molto i riferimenti allo standard che mi aiuterebbero a determinare il flusso di risoluzione che causa questa ambiguità.Perché questa chiamata virtuale è ambigua?
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);
}
Si dispone di una classe derivata da due classi base che non esegue l'override di 'apply()'. Una chiamata virtuale che tenta di cercare l'albero di ereditarietà e soddisfa due o più opzioni valide non è valida. C'è la tua ambiguità. – CodaFi
Infatti, ho dimenticato le mie clausole 'using'. Grazie. –