Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
'lid': kan geen toegang krijgen tot 'access_level' lid dat is gedeclareerd in klasse 'klasse'
Opmerkingen
Leden van een afgeleide klasse hebben geen toegang tot private leden van een basisklasse. U hebt geen toegang tot private of protected leden van klasse-exemplaren.
Voorbeelden
In het volgende voorbeeld wordt C2248 gegenereerd wanneer private of protected leden van een klasse toegankelijk zijn van buiten de klas. U kunt dit probleem oplossen door deze leden niet rechtstreeks buiten de klas te openen. Gebruik public lidgegevens en lidfuncties om met de klasse te communiceren.
// 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
}
Een ander conformanceprobleem dat C2248 beschikbaar maakt, is het gebruik van sjabloonvrienden en specialisatie. U kunt dit probleem oplossen door vriendfunctiesjablonen te declareren met behulp van een lege sjabloonparameterlijst <> of specifieke sjabloonparameters.
// 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);
}
Hier volgt een ander probleem met de conformiteit waarmee C2248 wordt weergegeven: u probeert een vriend van een klasse te declareren, maar de klasse is niet zichtbaar voor de declaratie van de vriend in het bereik van de klasse. Om dit probleem op te lossen, verleent u vriendschap aan de insluitklasse.
// 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
};