2014-10-10 66 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

相關問題