Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
acceso ambiguo de 'miembro'
Observaciones
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
En el ejemplo siguiente se 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 func2A::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 .