Compartir a través de


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 .