Cpp Friend功能无法访问私有静态成员

fel*_*425 3 c++

我有一个私有静态变量的类.main函数应该更改变量中的值,但即使我将main函数设置为类的朋友,编译器也会告诉我该变量是私有的,不能从main访问.

例:

ClassA.h:

namespace nameA{    

class ClassA {
    private:
        static int varA;

    public:
        ClassA(){};

    friend int main(void);
};
}
Run Code Online (Sandbox Code Playgroud)

ClassA.cpp:

namespace nameA{

int ClassA::varA = 0;

}
Run Code Online (Sandbox Code Playgroud)

主要:

int main(void){
    ClassA::varA = 42; //ERROR
}
Run Code Online (Sandbox Code Playgroud)

我不知道"朋友"是否也允许访问静态成员,或者我是否必须找到另一种解决方案.

ikl*_*kov 10

因为mainClassA中的友元函数位于nameA命名空间中.

如果你想声明int main(void)这个位于全局范围内的函数,你应该这样做:

friend int ::main(void);
Run Code Online (Sandbox Code Playgroud)

整个源码(在VS2015中编译):

int main(void);

namespace nameA {

    class ClassA {
    private:
        static int varA;

    public:
        ClassA() {};

        friend int ::main(void);
    };
}

namespace nameA {
    int ClassA::varA = 0;
}

int main(void) {
    nameA::ClassA::varA = 42;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)