Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"medlem": kan inte komma åt "access_level"-medlem deklarerad i klassen "klass"
Anmärkningar
Medlemmar i en härledd klass kan inte komma åt private medlemmar i en basklass. Du kan inte komma åt private eller protected medlemmar i klassinstanser.
Examples
I följande exempel genereras C2248 när private eller protected medlemmar i en klass används utanför klassen. Du kan åtgärda det här problemet genom att inte komma åt dessa medlemmar direkt utanför klassen. Använd public medlemsdata och medlemsfunktioner för att interagera med klassen.
// 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
}
Ett annat överensstämmelseproblem som exponerar C2248 är användningen av mallvänner och specialisering. Åtgärda problemet genom att deklarera vänfunktionsmallar med hjälp av antingen en tom mallparameterlista <> eller specifika mallparametrar.
// 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);
}
Här är ett annat överensstämmelseproblem som exponerar C2248: Du försöker deklarera en vän till en klass, men klassen är inte synlig för vändeklarationen i klassens omfång. Lös problemet genom att bevilja vänskap till den omslutande klassen.
// 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
};