在這種情況下,如何訪問另一個類的靜態成員函數中的私有靜態變量?
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;,它沒有錯誤。
爲什麼我不能用這種方式?
我希望只有靜態成員函數是可訪問的。
該代碼似乎在GCC 4.7上工作。 – 2014-10-10 10:20:33
我認爲,如果setN方法是公共的並且是靜態的,那麼通過使它與A成爲朋友,您將允許公共訪問A的私有成員。如果將setN私有化,會發生什麼? – VAndrei 2014-10-10 10:37:56
我與VS2013一起工作,但是,我現在在GCC上測試了它,並且它工作正常。我想我錯過了別的東西。 – 2014-10-10 10:38:37