Задать вопрос
@Tolstohabr

Почему невозможно обратиться к private?

Ищу с помощью дружественного метода минимальный и максимальный элементы массива.
Но компилятор ругается.

#include <iostream> 
#include <windows.h> 
using namespace std;

class work;

class vect
{
	int n;
	int* p;
public:
	vect(int size = 0)
	{
		n = size;
		p = new int[size];
	}
	~vect()
	{
		delete[] p;
	}
	void input_vect(); 
	void output_vect();
	friend void work::work_vect(vect& ob); 
};
 
void vect::input_vect()
{
	cout << "Ввод вектора:\n";
	for (int i = 0; i < n; i++) {
		cout << "elem=";
		cin >> p[i];
	}
}
void vect::output_vect()
{
	cout << "Вывод вектора:\n";
	for (int i = 0; i < n; i++) {
		cout << p[i] << " ";
	}
	cout << endl;
}

class work
{
public:
	void work_vect(vect& ob);
};
void work::work_vect(vect& ob)
{
	int min = 0;
	int max = 0;
	for (int i = 1; i < ob.n; i++) {
		if (ob.p[i] < ob.p[min]) {
			min = i;
		}
		if (ob.p[i] > ob.p[max]) {
			max = i;
		}
	}
	cout << "минимальный элемент под номером: " << min + 1 << endl;
	cout << "максимальный элемент под номером: " << max + 1 << endl;
}
int main()
{
	SetConsoleOutputCP(1251);
	int a;
        cin >> a;
	vect A(a);
	work B();
	A.input_vect();
	A.output_vect();
	B.work_vect(A);

	system("PAUSE");
	return 0;
}


использование неопределенного типа "work"
невозможно обратиться к private член, объявленному в классе "vect"
невозможно обратиться к private член, объявленному в классе "vect"
  • Вопрос задан
  • 933 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
Потому что нельзя использовать то что не объявлено
class vect;
class work
{
public:
  void work_vect(vect& ob);
};

// ... vect definition
friend void work::work_vect(vect& ob); 
// ...


кроме того

work B();
это объявление функции,
скобки здесь лишние.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы