我已经根据一些搜索应用了解决方案,但问题仍然存在。非常感谢您的帮助。
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;
}
最佳答案
d.func(&d);
还不够。 func
是指向 A
的非静态成员的成员函数指针。所以它可以在 A
的对象上调用。所以你需要这样写:
(this->*(d.func))(&d);
只要你把它写在 A
里就可以了。
如果你想从外部执行func
,比如说在main()
中,那么语法是这样的:
A a;
(a.*(a.d.func))(&a.d);
这是一个丑陋的语法。
关于C++ - 使用指向成员函数的函数指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324377/