Trong lớp học của tôi được gọi là Mat
, tôi muốn có một hàm có chức năng khác làm tham số. Ngay bây giờ tôi có 4 chức năng dưới đây, nhưng tôi gặp lỗi khi gọi print(). Dòng thứ hai mang lại cho tôi một lỗi, nhưng tôi không hiểu tại sao, vì cái đầu tiên hoạt động. Sự khác biệt duy nhất là hàm f
không phải là thành viên của lớp Mat
, nhưng f2
là. Thất bại là: error: no matching function for call to Mat::test(< unresolved overloaded function type>, int)'
C++ - <loại chức năng quá tải chưa được giải quyết>
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
}
Tại sao điều này xảy ra?
Có phải 'f2' tĩnh hay không? –
Thử thay đổi lệnh printf thành printf ("% d \ n", kiểm tra (Mat :: f2, 5)); – 2to1mux
Bạn có nhiều hơn một quá tải 'f2'? –