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

Функция с параметром указателем на другую функцию. Как сделать правильно чтобы не выдавало ошибку?

Надо сделать функцию с параметром указателем на другую функцию. Появилась проблема с массивом и не пойму как ее решить.

Ошибка (активно) E0167 аргумент типа "double" несовместим с параметром типа "double (*)(int, int)"
Эту ошибку выдает в этой строке: analiz(func(n));
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<conio.h>
#include<ctime>
#include<windows.h>

//Вариант 14. Создать функцию, которая описывается следующим прототипом:
//double analiz(int *op1, int op2, double(*func)(*int, int))
//{
//	return func(op1, op2);
//}
//где функция func – возвращает сумму четных из массива n - целых чисел, 
//сумму нечетных массива n - целых чисел, среднее геометрическое из массива n - целых чисел.
//В главной программе выполнить вызов всех реализаций функции analiz.




using namespace std;

int const y = 6;
double func(int n[y][y])
{
	int op1 = 0, op2 = 0;
	double s = 0;
	for (int j = 0; j < y; j++)
	{
		for (int i = 0; i < y; i++)
		{
			if (n[j][i] % 2 == 0)
			{
				op1++;
			}
			else
			{
				op2++;
			}
			s *= n[j][i];
		}
	}
	s = pow(s, 1 / y);
	return op1, op2, s;
}
double analiz(double(*func)(int, int))
{

	cout << func << endl;
}
int main()
{
	setlocale(LC_ALL, "RUS");
	srand(time(NULL));
	int n[y][y];
	int op1 = 0, op2 = 0;
	cout << "Массив n" << endl;
	for (int j = 0; j < y; j++)
	{
		for (int i = 0; i < y; i++)
		{
			n[j][i] = rand() % 10;
			cout << "n[" << j << "][" << i << "] = " << n[j][i] << endl;
		}
		cout << endl;
	}
	cout << endl;
	analiz(func(n));
	system("PAUSE");
}
  • Вопрос задан
  • 568 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
analiz(func(n));

Вот тут вы вызываете функцию func и передаете результат ее работы в analiz. Хотя analiz хочет получать функцию. Надо делать так: analiz(&func);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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