W mojej klasie o nazwie Mat
, chcę mieć funkcję, która przyjmuje inną funkcję jako parametr. Teraz mam 4 funkcje poniżej, ale dostaję błąd podczas wywoływania print(). Druga linia daje mi błąd, ale nie rozumiem dlaczego, ponieważ pierwszy działa. Jedyna różnica polega na tym, że funkcja f
nie należy do klasy Mat
, ale jest f2
. Niepowodzenie jest: error: no matching function for call to Mat::test(< unresolved overloaded function type>, int)'
C++ - <nierozstrzygnięty typ funkcji przeciążonej>
template <typename F>
int Mat::test(F f, int v){
return f(v);
}
int Mat::f2(int x){
return x*x;
}
int f(int x){
return x*x;
}
void Mat::print(){
printf("%d\n",test(f ,5)); // works
printf("%d\n",test(f2 ,5)); // does not work
}
Dlaczego tak się dzieje?
Czy 'f2' jest statyczne czy nie? –
Spróbuj zmienić wywołanie printf na printf ("% d \ n", test (Mat :: f2, 5)); – 2to1mux
Czy masz więcej niż jedno przeciążenie 'f2'? –