Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
'identificador' não acessível porque 'classe' usa 'especificador' para herdar de 'classe'
Observações
identifier é herdada de uma classe declarada com acesso privado ou protegido.
Examples
O exemplo a seguir gera 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
Este erro também pode ser gerado como resultado do trabalho de conformidade do compilador que foi feito para Visual Studio .NET 2003: controle de acesso com membros protegidos. Um membro protegido (n) só pode ser acessado através de uma função de membro de uma classe (B) que herda da classe (A) da qual ele (n) é membro.
Para código que é válido nas versões Visual Studio .NET 2003 e Visual Studio .NET do Visual C++, declare o membro como um amigo do tipo. A herança pública também poderia ser usada.
// 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 também pode ser gerado como resultado do trabalho de conformidade do compilador que foi feito para Visual Studio .NET 2003: classes base privadas agora inacessíveis. Uma classe (A) que é uma classe base privada para um tipo (B) não deve ser acessível a um tipo (C) que usa B como uma classe base.
Para código que é válido nas versões Visual Studio .NET 2003 e Visual Studio .NET do Visual C++, use o operador scope.
// 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;
}
};