У меня проблемы с доступом к закрытому члену класса из класса друзей.
Класс, который содержит закрытый член, который я хочу изменить, и класс, в котором производится изменение, находится в разных пространствах имен.
Класс друга определяется после класса, содержащего данные, поэтому я попытался переадресовать объявление класса друга за пределы пространства имен .
g ++ говорит, что я не могу изменить член, потому что он частный, визуальная студия, кажется, думает, что это нормально.
Не делаю ли я здесь какие-то странные нестандартные вещи? Почему можно t Я сменил участника? Вот упрощенный фрагмент, который представляет мою проблему:
struct S;
namespace N
{
class A
{
int m;
public:
A():m(5){};
friend struct S;
};
}
using namespace N;
struct S
{
A& a;
S(A& a):a(a) {}
void changeA(){ a.m = 9; }
};
int main()
{
A a;
S s(a);
s.changeA();
}