Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.