2014-10-10 81 views
0

在这种情况下,如何访问另一个类的静态成员函数中的私有静态变量?

A.H

#include "B.h" 

class A{ 
    private: 
     static int n; 
     friend void B::setN(int _n); 
}; 

A.cpp

#include "A.h" 

int A::n = 0; 

B.h

class B{ 
    public: 
     static void setN(int _n); 
}; 

B.cpp

#include "B.h" 
#include "A.h" 

void B::setN(int _n) { A::n = _n; } 

智能感知:成员“A :: n”(在“A.h”处声明)不可访问已发生。

但是,如果我更正朋友void B :: setN(int _n);朋友类B;,它没有错误。

为什么我不能用这种方式?

我希望只有静态成员函数是可访问的。

+0

该代码似乎在GCC 4.7上工作。 – 2014-10-10 10:20:33

+0

我认为,如果setN方法是公共的并且是静态的,那么通过使它与A成为朋友,您将允许公共访问A的私有成员。如果将setN私有化,会发生什么? – VAndrei 2014-10-10 10:37:56

+0

我与VS2013一起工作,但是,我现在在GCC上测试了它,并且它工作正常。我想我错过了别的东西。 – 2014-10-10 10:38:37

回答

0

这导致智能感知错误只,而不是编译错误。

0

错过了一个分号

void B::setN(int _n) { A::n = _n; } 
+0

对不起,我错过了当我写这个问题。 – 2014-10-10 10:27:08

相关问题