Việc gán biến trỏ hàm sai là do bạn đã sử dụng sai kiểu con trỏ. Nếu như trong C, mọi thứ đều là toàn cục, ta có thể tham chiếu bằng cách include thì trong C++ mỗi lớp có ngữ cảnh của nó, các hàm trong lớp này không thể gọi khi ta đang trong ngữ cảnh của lớp khác hoặc toàn cục nếu ko static. Điều này phân biệt int (__cdecl *)(int), một con trỏ hàm nhận int trả về int, với int (__thiscall ClassA::*)(int), con trỏ của hàm trong ClassA nhận int trả về int. Nếu bạn muốn dùng hàm toàn cục thì khai báo biến i bằng : , ngược lại, muốn dùng hàm trong ClassA thì khai báo hàm :
Code:
int func1(int (ClassA::*pf)(int))
.
Để tiện dụng ta có thể dùng typedef :
Code:
typedef int (*INT_FP)(int);
typedef int (ClassA::*A_INT_FP)(int);