Error del compilador C2385
acceso ambiguo de 'miembro'
Un miembro se hereda de más de un tipo base, lo que hace que el acceso no calificado a ese miembro sea ambiguo. Para resolver este error:
- Calificar explícitamente el acceso al miembro.
- Convierta el objeto en la clase base que contiene el miembro antes de acceder al miembro.
- Cambie el nombre del miembro ambiguo de la clase base.
- Ponga el miembro en el ámbito.
Ejemplo
El ejemplo siguiente genera la advertencia 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
}
Puede resolver las llamadas ambiguas a func1
mediante la incorporación de ambas sobrecargas al ámbito. Sin embargo, esto no funciona porque func2
A::func2
y B::func2
no toman argumentos, por lo que llamarlos no se pueden diferenciar por sus parámetros. Para resolver el problema, haga lo siguiente:
- Introducir la que desea usar en el ámbito
- Califica explícitamente la llamada con el tipo base
- Convierta el objeto antes de llamar a la función .