Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
'membre' : ne peut pas accéder au membre 'access_level' déclaré dans la classe 'classe'
Notes
Les membres d’une classe dérivée ne peuvent pas accéder aux private membres d’une classe de base. Vous ne pouvez pas accéder aux private instances de classe ni protected les membres.
Examples
L’exemple suivant génère l’erreur C2248 lorsque les membres private ou protected d’une classe sont accessibles de l’extérieur. Pour résoudre ce problème, n’accédez pas directement à ces membres en dehors de la classe. Utilisez les public données membres et les fonctions membres pour interagir avec la 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
}
Un autre problème de conformité qui expose C2248 est l’utilisation d’amis de modèle et de spécialisation. Pour résoudre ce problème, déclarez des modèles de fonction friend à l’aide d’une liste <> de paramètres de modèle vide ou de paramètres de modèle spécifiques.
// 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);
}
Voici un autre problème de conformité qui expose C2248 : Vous tentez de déclarer un ami d’une classe, mais la classe n’est pas visible par la déclaration friend dans l’étendue de la classe. Pour résoudre ce problème, accordez l’amitié à la classe englobante.
// 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
};