Delen via


Compilerfout C2385

dubbelzinnige toegang van 'lid'

Opmerkingen

Een lid wordt overgenomen van meer dan één basistype, waardoor niet-gekwalificeerde toegang tot dat lid dubbelzinnig is. Ga als volgt te werk om deze fout op te lossen:

  • Expliciet in aanmerking komen voor toegang tot het lid.
  • Cast het object naar de basisklasse die het lid bevat voordat u het lid opent.
  • Wijzig de naam van het dubbelzinnige lid in de basisklasse.
  • Breng het lid binnen het bereik.

Example

In het volgende voorbeeld wordt C2385 gegenereerd:

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

U kunt de dubbelzinnige aanroepen func1 oplossen door beide overbelastingen binnen het bereik te brengen. Dit werkt echter niet omdat func2A::func2 en B::func2 geen argumenten gebruiken, zodat ze niet kunnen worden onderscheiden door hun parameters. U kunt het probleem oplossen door:

  • Maak kennis met het bereik dat u wilt gebruiken
  • De aanroep expliciet kwalificeren met het basistype
  • Cast het object voordat u de functie aanroept.