Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mehrdeutiger Zugriff von „member“
Bemerkungen
Ein Element wird von mehr als einem Basistyp geerbt, wodurch nicht qualifizierter Zugriff auf dieses Element mehrdeutig wird. So beheben Sie diesen Fehler:
- Zugriff auf das Mitglied explizit qualifizieren.
- Wandeln Sie das Objekt in die Basisklasse um, die das Element enthält, bevor Sie auf das Element zugreifen.
- Benennen Sie das mehrdeutige Element in der Basisklasse um.
- Bringen Sie das Element in den Bereich.
Beispiel
Im folgenden Beispiel wird C2385 generiert:
// 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
}
Sie können die mehrdeutigen Aufrufe func1 auflösen, indem Sie beide Überladungen in den Bereich bringen. Dies funktioniert func2 jedoch nicht, da A::func2 argumente B::func2 nicht verwendet werden, sodass das Aufrufen von Argumenten nicht von ihren Parametern unterschieden werden kann. Sie können das Problem beheben, indem Sie:
- Einführung in den Bereich, den Sie verwenden möchten
- Explizites Qualifizieren des Anrufs mit dem Basistyp
- Wandeln Sie das Objekt vor dem Aufrufen der Funktion um.