Nie tak:
double *calculate(double p, double m, double (*add)(double, double));
a tak:
double *calculate(double p, double m, double* (*add)(double, double));
Poza tym tutaj masz błąd:
double * add(double x, double y)
{
return x + y; // odejmujesz dwie liczby typu double, których wynikiem jest zmienna typu double, a funkcja ma zwracać wskaźnik na double
}
Generalnie masz duże problemy z zrozumieniem wskaźników. Zacznij od prostszych rzeczy z nimi związanych. Twój kod zmodyfikowałem i wygląda tak:
#include <iostream>
double add(double x, double y);
double calculate(double p, double m, double (*foo)(double, double));
int main()
{
double l, k;
for(int i=0; i < 3; i++)
{
std::cout << "Podaj wartosc 1: ";
std::cin >> l;
std::cout << "Podaj wartosc 2: ";
std::cin >> k;
double q = calculate(l, k, *add);
std::cout << "Wartosc: " << q << "\nAdres: " << &q << std::endl;
}
return 0;
}
double add(double x, double y)
{
return x + y;
}
double calculate(double p, double m, double (*foo)(double, double))
{
return foo(p, m);
}
może to ci pomoże.