2014-10-10 3 views
0

В этой ситуацииКак получить доступ к частной статической переменной в статической функции-члене другого класса?

хиджры

#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; } 

IntelliSense: член «A :: n» (объявлен в «A.h») недоступен.

Но если я исправлю friend void B :: setN (int _n); - класс друга B;, у него нет ошибок.

Почему я не могу использовать этот способ?

Надеюсь, что доступна только функция статического члена.

+0

Код, похоже, работает на GCC 4.7. –

+0

Я думаю, что если метод setN является общедоступным и статическим, сделав его другом с A, вы разрешите публичный доступ к закрытым членам A. Что произойдет, если вы сделаете setN private? – VAndrei

+0

Я работал с VS2013, но да, я тестировал его сейчас на GCC, и он работает. Я думаю, что мне не хватает чего-то другого. –

ответ

0

Это вызывает IntelliSense Ошибка только не ошибка компиляции.

0

пропустил точку с запятой

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

Прости, я пропустил, когда я написал этот вопрос. –

Смежные вопросы