Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
'membro': não é possível acessar o membro 'access_level' declarado na classe 'classe'
Comentários
Os membros de uma classe derivada não podem acessar private membros de uma classe base. Você não pode acessar private ou protected membros de instâncias de classe.
Exemplos
O exemplo a seguir gera C2248 quando private ou protected membros de uma classe são acessados de fora da classe. Para corrigir esse problema, não acesse esses membros diretamente fora da classe. Use public dados de membro e funções de membro para interagir com a classe.
// C2248_access.cpp
// compile with: cl /EHsc /W4 C2248_access.cpp
#include <stdio.h>
class X {
public:
int m_publicMember;
void setPrivateMember( int i ) {
m_privateMember = i;
printf_s("\n%d", m_privateMember);
}
protected:
int m_protectedMember;
private:
int m_privateMember;
} x;
int main() {
x.m_publicMember = 4;
printf_s("\n%d", x.m_publicMember);
x.m_protectedMember = 2; // C2248 m_protectedMember is protected
x.m_privateMember = 3; // C2248 m_privMemb is private
x.setPrivateMember(0); // OK uses public access function
}
Outro problema de conformidade que gera o C2248 é o uso de amigos de modelo e especialização. Para corrigir esse problema, declare modelos de função de amigo usando uma lista <> de parâmetros de modelo vazia ou parâmetros de modelo específicos.
// C2248_template.cpp
// compile with: cl /EHsc /W4 C2248_template.cpp
template<class T>
void f(T t) {
t.i; // C2248
}
struct S {
private:
int i;
public:
S() {}
friend void f(S); // refer to the non-template function void f(S)
// To fix, comment out the previous line and
// uncomment the following line.
// friend void f<S>(S);
};
int main() {
S s;
f<S>(s);
}
Aqui está outro problema de conformidade que expõe C2248: Você tenta declarar um amigo de uma classe, mas a classe não está visível para a declaração de amigo no escopo da classe. Para corrigir esse problema, conceda amizade à classe que inclui.
// C2248_enclose.cpp
// compile with: cl /W4 /c C2248_enclose.cpp
class T {
class S {
class E {};
};
friend class S::E; // C2248
};
class A {
class S {
class E {};
friend class A; // grant friendship to enclosing class
};
friend class S::E; // OK
};