Witam napisałem program, którego kod pokaże poniżej. Wystąpiły dwa błędy z konwersją, które również pokaże. Próbowałem samodzielnie rozwiązać ten problem jednak nie skutecznie.
Kod:
#include <iostream>
void * m1(double y, double u);
void * m2(double c, double d);
void * m3(double a, double b);
void (*add[3])(double x, double y);
void calculate(double p, double m, double (*add[3])(double, double));
int main()
{
double l, k;
for(int i=0; i<3; i++)
{
std::cout << "Podaj wartosc: ";
std::cin >> l;
std::cout << "Podaj wartosc: ";
std::cin >> k;
calculate(l, k, add[3]);
}
return 0;
}
void * m1(double y, double u) { std::cout << y + u << std::endl; }
void * m2(double c, double d) { std::cout << c - d << std::endl; }
void * m3(double a, double b) { std::cout << a * b << std::endl; }
void calculate(double p, double m, void (*add[3])(double, double))
{
add[3] = {m1, m2, m3};
for(int i=0; i<3; i++)
add[i](p,m);
}
Błędy:
start_c.cpp: In function ‘int main()’:
start_c.cpp:20:25: error: cannot convert ‘void (*)(double, double)’ to ‘double (**)(double, double)’ for argument ‘3’ to ‘void calculate(double, double, double (**)(double, double))’
calculate(l, k, add[3]);
^
start_c.cpp: In function ‘void calculate(double, double, void (**)(double, double))’:
start_c.cpp:32:22: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘void (*)(double, double)’ in assignment
add[3] = {m1, m2, m3};