我已经应用了一些基于搜索的解决方案,但问题仍然存在。非常感谢你的帮助。
error: must use '.*' or '->*' to call pointer-to-member function ...源代码:
#include <stdio.h>
class A
{
public:
struct data;
typedef int (A::*func_t)(data *);
typedef struct data
{
int i;
func_t func;
}
data;
data d;
void process()
{
d.func(&d);
}
A()
{
d.i = 999;
d.func = &A::print;
}
int print(data *d)
{
printf("%d\n", d->i);
return 0;
}
};
int main()
{
A *a = new A;
a->process();
return 0;
}发布于 2013-01-15 02:38:42
您的process函数试图调用d.func,但它是指向成员函数的指针。必须在某个对象上调用指向成员函数的指针。假设您希望A实例为this,在这种情况下,您的process函数应该如下所示:
void process()
{
(this->*(d.func))(&d);
}请注意,当您有指向成员函数的指针时,使用->*运算符来调用该成员函数。
发布于 2013-01-15 02:39:10
d.func(&d);是不够的。func是指向A的非静态成员的成员函数指针。因此它可以在A的对象上调用。所以你需要这样写:
(this->*(d.func))(&d);只要您在A中编写这段代码,它就可以工作。
如果你想从外部执行func,比如在main()中,那么语法是这样的:
A a;
(a.*(a.d.func))(&a.d);这是一个丑陋的语法。
发布于 2013-01-15 02:49:48
其他答案已经指出,您需要使用(this->*d.func)(&d)来调用指向成员的指针函数(因为您需要提供它所属的对象)。
另一种选择是使函数成为静态函数,它不需要特殊的语法来调用。要做到这一点,请按如下方式更改typedef:
typedef int (*func_t)(data *);然后将print函数设为静态函数:
static int print(data *d)
{
...
}现在您可以只调用d.func(&d)
https://stackoverflow.com/questions/14324377
复制相似问题