Не в состоянии понять, почему функция друга не работает

#c #friend

#c #друг

Вопрос:

 #include<iostream>
using namespace std;

class A;
void test(A amp;a);
class A
{
    private:
        int x;
        int y;
        friend void test();
};
void test(A amp;a)
{
    a.x = 1;
    a.y = 2;
    cout << a.x << " " << a.y << endl;
}
int main()
{
    A a;
    test(a);
}
  

Ошибки, которые я получаю, заключаются в следующем-

1. ошибка: ‘int A:: x’ является закрытым в этом контексте

2. ошибка: ‘int A:: y’ является закрытым в этом контексте

Разве функции друга не должны иметь возможность изменять закрытые члены класса?

Комментарии:

1. Даже в указанной вами ссылке. ширина является частной собственностью. Но к ней все еще обращаются внутри функции друга

2. Извините, вы правы. Мой C довольно ржавый.

3. Я предполагаю friend , что метод должен быть объявлен внутри области public видимости.

4. Я обнаружил проблему с моим кодом. Спасибо, что уделили время

Ответ №1:

 #include <iostream>
using namespace std;

class A { 
  private: 
    int x; 
    int y; 

  public: 
    friend void test(A amp;); 
};

void test(A amp;a) { 
  a.x=1; 
  a.y=2; 
  cout << a.x << " " << a.y << endl; 
}

int main() { 
  A a; 
  test(a); 
}
  

Ответ №2:

В моем коде была ошибка: определение friend, которое я дал внутри класса, было неправильным

 #include<iostream>
using namespace std;

class A;
void test(A amp;a);
class A
{
    private:
        int x;
        int y;
        friend void test(A amp;a);
};
void test(A amp;a)
{
    a.x = 1;
    a.y = 2;
    cout << a.x << " " << a.y << endl;
}
int main()
{
    A a;
    test(a);
}