friend
позволяет коду получить доступ к иначе недоступному имени. Однако код, который обращается к члену a
, находится в main
, а не в классе B
, поэтому у него нет специальных прав доступа.
Вам нужно что-то вроде этого:
class B
{
public:
A abc;
void set_abc_a(int i) { abc.a = i; }
};
int main ()
{
B b;
b.abc.b = -1;
b.set_abc_a(0);
return 0;
}