我正在尝试使用函数指针,但下面的3行似乎并不想合作......
我收到错误代码C3867。
你能看出我做错了吗?
在.h文件中
void MyFunc(int, FILEINFO*(*)(FILEINFO*), FILEINFO*, int);
.cpp文件中的定义
void MyFunc(int number, FILEINFO*(*GetFiles)(FILEINFO*), FILEINFO* args, int type);
然后我在这里实际上是在调用函数
MyFuncClass->MyFunc(GetNumber(), &BigClass::PassThis, GetArgs(), TheType);
任何问题都会跳出来?
答案 0 :(得分:9)
BigClass::PassThis()
的定义是什么?它是静态类成员函数还是常规成员函数?如果它是常规成员函数,则不能这样做,因为它具有隐藏的this
参数。请参阅C ++ FAQ Lite的question 33.4。
答案 1 :(得分:7)
您不能将类的非静态成员函数作为
普通函数指针,因为成员函数隐式使用了
这个指针。解决方案是定义一个带有指针的静态成员函数
作为第一个参数的类,并将调用包装到BigClass::PassThis
并传递指向该成员函数的指针。请参阅
The Function Pointer Tutorials了解更多信息。
更好的解决方案可能是改为使用仿函数。
答案 2 :(得分:2)
我们需要看到BigClass的定义。除非PassThis是一个静态成员函数,否则你所做的事情是行不通的,因为常规成员函数不能像你做的那样作为函数指针传递(除此之外,你没有'this'参数)。
答案 3 :(得分:2)
我猜测&BigClass::PassThis
是指向成员函数的指针,而不是指向普通函数的指针。