Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"identyfikator" jest niedostępny, ponieważ "klasa" używa specyfikatora do dziedziczenia po "klasie"
Uwagi
identifier jest dziedziczony z klasy zadeklarowanej z dostępem prywatnym lub chronionym.
Przykłady
Poniższy przykład generuje C2247:
// C2247.cpp
class A {
public:
int i;
};
class B : private A {}; // B inherits a private A
class C : public B {} c; // so even though C's B is public
int j = c.i; // C2247, i not accessible
Ten błąd można również wygenerować w wyniku pracy zgodności kompilatora, która została wykonana dla programu Visual Studio .NET 2003: kontrola dostępu z chronionymi elementami członkowskimi. Dostęp do chronionego elementu członkowskiego (n) można uzyskać tylko za pośrednictwem funkcji składowej klasy (B), która dziedziczy z klasy (A), z której (n) jest składową.
W przypadku kodu, który jest prawidłowy zarówno w wersjach Visual Studio .NET 2003, jak i Visual Studio .NET programu Visual C++, zadeklaruj element członkowski jako znajomy tego typu. Można również użyć dziedziczenia publicznego.
// C2247b.cpp
// compile with: /c
// C2247 expected
class A {
public:
void f();
int n;
};
class B: protected A {
// Uncomment the following line to resolve.
// friend void A::f();
};
void A::f() {
B b;
b.n;
}
C2247 można również wygenerować w wyniku pracy kompilatora zgodności, która została wykonana dla programu Visual Studio .NET 2003: prywatne klasy bazowe są teraz niedostępne. Klasa (A) będąca prywatną klasą bazową typu (B) nie powinna być dostępna dla typu (C), który używa B jako klasy bazowej.
W przypadku kodu, który jest prawidłowy zarówno w wersjach Visual Studio .NET 2003, jak i Visual Studio .NET visual C++, użyj operatora zakresu.
// C2247c.cpp
// compile with: /c
struct A {};
struct B: private A {};
struct C : B {
void f() {
A *p1 = (A*) this; // C2247
// try the following line instead
// ::A *p2 = (::A*) this;
}
};