Sdílet prostřednictvím


Chyba kompilátoru C2385

nejednoznačný přístup "člena"

Poznámky

Člen je zděděný z více než jednoho základního typu, což zdědí nekvalifikovaný přístup k danému členu nejednoznačným. Vyřešení této chyby:

  • Explicitně opravňuje přístup k členu.
  • Před přístupem k členu přetypujte objekt na základní třídu obsahující člena.
  • Přejmenujte nejednoznačný člen základní třídy.
  • Přineste člena do oboru.

Příklad

Následující příklad vygeneruje 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
}

Nejednoznačné volání func1 můžete vyřešit přenesením obou přetížení do oboru. To ale nefunguje func2 , protože A::func2 a B::func2 nepřebírají argumenty, takže jejich volání není možné odlišit jejich parametry. Tento problém můžete vyřešit pomocí následujících:

  • Představte si ten, který chcete použít v oboru.
  • Explicitní kvalifikace volání pomocí základního typu
  • Před voláním funkce přetypujte objekt.