Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
niejednoznaczny dostęp do elementu członkowskiego
Element członkowski jest dziedziczony z więcej niż jednego typu podstawowego, co sprawia, że niekwalifikowany dostęp do tego elementu członkowskiego jest niejednoznaczny. Aby rozwiązać ten błąd:
- Jawne kwalifikowanie dostępu do członka.
- Rzutowanie obiektu do klasy bazowej zawierającej składową przed uzyskaniem dostępu do składowej.
- Zmień nazwę niejednoznacznego elementu członkowskiego w klasie bazowej.
- Przełącz element członkowski do zakresu.
Przykład
Poniższy przykład generuje 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
}
Wywołania niejednoznaczne func1
można rozwiązać, przenosząc oba przeciążenia do zakresu. Nie działa to jednak z func2
powodu A::func2
braku argumentów, B::func2
dlatego wywołanie ich nie może być rozróżniane przez ich parametry. Problem można rozwiązać, wykonując następujące czynności:
- Wprowadź element, którego chcesz użyć do zakresu
- Jawne kwalifikowanie wywołania za pomocą typu podstawowego
- Rzutuj obiekt przed wywołaniem funkcji.