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