Udostępnij za pośrednictwem


Błąd kompilatora C2385

niejednoznaczny dostęp do elementu członkowskiego

Element członkowski jest dziedziczony z więcej niż jednego typu podstawowego, co sprawia, że niekwalifikowany dostęp do tego elementu członkowskiego jest niejednoznaczny. Aby rozwiązać ten błąd:

  • Jawne kwalifikowanie dostępu do członka.
  • Rzutowanie obiektu do klasy bazowej zawierającej składową przed uzyskaniem dostępu do składowej.
  • Zmień nazwę niejednoznacznego elementu członkowskiego w klasie bazowej.
  • Przełącz element członkowski do zakresu.

Przykład

Poniższy przykład generuje 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
}

Wywołania niejednoznaczne func1 można rozwiązać, przenosząc oba przeciążenia do zakresu. Nie działa to jednak z func2 powodu A::func2 braku argumentów, B::func2 dlatego wywołanie ich nie może być rozróżniane przez ich parametry. Problem można rozwiązać, wykonując następujące czynności:

  • Wprowadź element, którego chcesz użyć do zakresu
  • Jawne kwalifikowanie wywołania za pomocą typu podstawowego
  • Rzutuj obiekt przed wywołaniem funkcji.