2009-06-02 74 views
3

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

任何问题跳出来吗?

+2

BigClass :: PassThis是一个静态函数,对吧? – 2009-06-02 20:02:52

+0

谷歌搜索错误代码时的第一个结果:http://msdn.microsoft.com/en-us/library/b0x1aatf(VS.80).aspx 看起来很清楚xD – fortran 2009-06-02 20:22:24

回答

7

由于成员函数隐式使用此指针,所以不能将类的非静态成员函数作为普通函数指针传递给 。对此的一个解决方案是定义一个静态成员函数,该函数将指针 作为第一个参数,并将调用包装为BigClass::PassThis,并将指针传递给该成员函数。有关更多信息,请参阅 The Function Pointer Tutorials

更好的解决方案可能是使用函数来代替。

9

BigClass::PassThis()什么样一般是什么?它是静态类成员函数还是常规成员函数?如果它是常规成员函数,则不能这样做,因为它具有隐藏的this参数。请参阅C++ FAQ Lite的question 33.4

2

我们需要看BigClass的定义。除非PassThis是一个静态成员函数,否则你所做的不能工作,因为正则成员函数不能像你正在做的那样作为函数指针传递(除此之外,你没有'this'参数)。

2

我猜&BigClass::PassThis是一个指向成员函数的指针,而不是指向普通函数的指针。

+0

值得注意的是,只要将`&`操作符应用到它的结果中,就可以得到一个指向相应类型函数的指针,那么'BigClass :: PassThis`是什么类型并不重要。 – 2009-06-02 20:20:03