Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
"member": Kann nicht auf "access_level"-Mitglied zugreifen, das in der Klasse "Klasse" deklariert ist.
Hinweise
Elemente einer abgeleiteten Klasse können nicht auf Member einer Basisklasse zugreifen private . Sie können nicht auf Klasseninstanzen oder protected Member von Klasseninstanzen zugreifenprivate.
Beispiel
Im folgenden Beispiel wird C2248 generiert, wenn private außerhalb der Klasse auf protected Elemente einer Klasse zugegriffen wird. Um dieses Problem zu beheben, greifen Sie nicht direkt außerhalb der Klasse auf diese Member zu. Verwenden Sie public Memberdaten und Memberfunktionen, um mit der Klasse zu interagieren.
// 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
}
Ein weiteres Konformitätsproblem, das C2248 verfügbar macht, ist die Verwendung von Vorlagenfreunden und Spezialisierung. Um dieses Problem zu beheben, deklarieren Sie Freund-Funktionsvorlagen, indem Sie entweder eine leere Vorlagenparameterliste <> oder bestimmte Vorlagenparameter verwenden.
// 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 ist ein weiteres Konformitätsproblem, das C2248 verfügbar macht: Sie versuchen, einen Freund eines Kurses zu deklarieren, aber die Klasse ist für die Deklaration des Freundes im Bereich der Klasse nicht sichtbar. Um dieses Problem zu beheben, gewähren Sie der eingeschlossenen Klasse Freundschaft.
// 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
};