Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
nejednoznačný přístup "člena"
Poznámky
Člen je zděděný z více než jednoho základního typu, což zdědí nekvalifikovaný přístup k danému členu nejednoznačným. Vyřešení této chyby:
- Explicitně opravňuje přístup k členu.
- Před přístupem k členu přetypujte objekt na základní třídu obsahující člena.
- Přejmenujte nejednoznačný člen základní třídy.
- Přineste člena do oboru.
Příklad
Následující příklad vygeneruje 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
}
Nejednoznačné volání func1 můžete vyřešit přenesením obou přetížení do oboru. To ale nefunguje func2 , protože A::func2 a B::func2 nepřebírají argumenty, takže jejich volání není možné odlišit jejich parametry. Tento problém můžete vyřešit pomocí následujících:
- Představte si ten, který chcete použít v oboru.
- Explicitní kvalifikace volání pomocí základního typu
- Před voláním funkce přetypujte objekt.