Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
accesso ambiguo di 'member'
Osservazioni:
Un membro viene ereditato da più tipi di base, rendendo non qualificato l'accesso a tale membro ambiguo. Per risolvere questo errore:
- Qualificare in modo esplicito l'accesso al membro.
- Eseguire il cast dell'oggetto alla classe base contenente il membro prima di accedere al membro.
- Rinominare il membro ambiguo nella classe di base.
- Inserire il membro nell'ambito.
Esempio
L'esempio seguente genera l'errore C2385:
// C2385.cpp
struct A
{
void func1(int i) {}
void func2() {}
};
struct B
{
void func1(char c) {}
void func2() {}
};
struct C : A, B
{
// Uncomment the following lines to resolve the first 2 errors
// The error below for the call to c.func2() will remain
// using A::func1;
// using B::func1;
};
int main()
{
C c;
c.func1(123); // C2385
c.func1('a'); // C2385
c.func2(); // C2385
c.A::func2(); // OK because explicitly qualified
c.B::func2(); // OK because explicitly qualified
static_cast<A>(c).func2(); // OK because of the cast
static_cast<B>(c).func2(); // OK because of the cast
}
È possibile risolvere le chiamate ambigue a func1 inserendo entrambi gli overload nell'ambito. Tuttavia, questo non funziona perché func2A::func2 e B::func2 non accetta argomenti, quindi la chiamata non può essere differenziata in base ai parametri. È possibile risolvere il problema in base a:
- Introdurre quello che si vuole usare nell'ambito
- Qualificare in modo esplicito la chiamata con il tipo di base
- Eseguire il cast dell'oggetto prima di chiamare la funzione.