函数指针问题

时间:2009-06-02 19:56:24

标签: c++ function pointers

我正在尝试使用函数指针,但下面的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);

任何问题都会跳出来?

4 个答案:

答案 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是指向成员函数的指针,而不是指向普通函数的指针。