我试图用函数指针调用函数,其中函数指针是类成员。
我简化了代码以仅显示问题,但原始代码中的foo()
函数已经写入,所以我无法更改它。
(在我的实际代码中,foo
来自GLFW(glfwSetKeyCallback
),A
是输入处理程序类。)
代码是:
#include <iostream>
// this four line can not be changed
typedef void(*fptr)(int);
void foo(fptr f) {
f(0);
}
void testOutA(int i) {
}
class A {
public:
void testInA(int i) {
}
};
int main()
{
foo(testOutA); // works fine as it should be
A * a = new A();
foo(a->testInA); // ERROR
return 0;
}
编译错误消息是:
错误:错误C3867:'A :: testInA':非标准语法;使用'&amp;'创建指向成员的指针
答案 0 :(得分:2)
表达式a->testInA
的类型是指向非static
成员函数的指针。
它与fptr
的类型不同,因此编译器会发出错误,尽管是一个神秘的错误。
如果testInA
为static
,则会通过编译。
有关详细信息,请参阅C++ function pointer (class member) to non-static member function。