我正在用B instanceB;
在a类(这是QMainWindow
)的方法中创建类B的实例,然后用B.method()
调用B的方法,并将a的方法的函数指针传递给它。
现在编译器显示argument of type "void (A::*)()" is incompatible with parameter of type "void (*)()"
。如果可能的话,我该如何解决这个问题?
代码:
void A::method1_of_A(void)
{
B instanceB;
B.methodB(method2_of_A); // this is where the compiler complains
}
参数void (*)()
只能接受自由函数
如果你有参数std::function<void()>
,它可以调用任何可调用的,所以你可以调整你的成员函数与lambda捕获对象,并传递
B.methodB([&a](){ a.method2_of_A(); })
或将成员函数绑定到对象(包括
B.methodB(std::bind(&A::method2_of_A, a))
当然,最明确的意图是在@John的注释中,你知道a的成员函数是预期的:
void methodB(void (A::*function)()) { (this->*function)(); }