Теперь у вас есть некоторые проблемы ...
TYPE (*P)(x)
говорит, что вы ожидаете указатель на функцию, которая принимает аргумент типа x
- измените его на существующий тип.
В выражении func(z, y, c, pf(x))
вы пытаетесь вызвать указатель на функцию pf
вместо того, чтобы просто передать его.
Затем вы вызываете func
с параметрами, основанными на разных типах для первых 3 параметров, int
и char
, но func
ожидает, что они основаны на одном типе.
Попробуйте записать, с какими типами будет вызываться func
, и попробуйте сопоставить его с сигнатурой для func
с заменой TYPE
на int
.
.
например. если у вас есть следующее:
template<typename T> void f(T* a, T* b);
и попробуйте назвать это так:
int* a = 0;
int* b = 0;
f(a, b);
компилятор создает и вызывает функцию
void f<int>(int*, int*);
Но если вы сделаете следующее:
int* a = 0;
char* b = 0;
f(a, b);
как называться?
void f<int> (int*, int* ); // doesn't match, 2nd argument is char*
void f<char>(char*, char*); // doesn't match, 1st argument is int*