Megosztás a következőn keresztül:


C2385-ös fordítási hiba

a "tag" nem egyértelmű hozzáférése

Megjegyzések

Egy tag egynél több alaptípustól öröklődik, így az adott taghoz való korlátlan hozzáférés nem egyértelmű. A hiba megoldása:

  • Explicit módon jogosult a taghoz való hozzáférésre.
  • Az objektumot a tagot tartalmazó alaposztályba öntötte, mielőtt hozzáfér a taghoz.
  • Nevezze át a nem egyértelmű tagot az alaposztályban.
  • Hozza a tagot a hatókörbe.

Example

Az alábbi példa c2385-öt hoz létre:

// 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
}

A kétértelmű hívásokat úgy oldhatja meg, hogy func1 mindkét túlterhelés hatókörbe kerül. Ez azonban nem működik func2 , mert A::func2B::func2 nem fogad el argumentumokat, ezért a meghívásuk nem különböztethető meg a paraméterek alapján. A problémát a következő lépéssel oldhatja meg:

  • A használni kívánt hatókör bemutatása
  • A hívás explicit minősítése az alaptípussal
  • A függvény meghívása előtt vetje el az objektumot.