Функция и метод разные.Вы не можете вставить указатель на метод в указатель на функцию.Так что
typedef double (*fptr)(int x, int y);
должно быть
typedef double (Fred::*fptr)(int x, int y);
или вы должны использовать оболочку, которая скрывает различия, такие как std::function
.
Чего не хватает в
#include <iostream>
typedef double (Fred::*fptr)(int x, int y); // Fred unknown.
class Fred
{
...
}
является предварительным объявлением для Fred
.Вы не можете использовать Fred
, если компилятор не знает Fred
существует.
Решение: Форвард объявить Fred
.
#include <iostream>
class Fred;
typedef double (Fred::*fptr)(int x, int y); // Fred known enough to get pointers
class Fred
{
...
}
Но то, что вы действительно хотите, это std::function
.