C++-使用指针调用另一个类的成员函数
我正在测试,试图调用作为参数传递的成员函数,该成员函数必须是另一个类之一。这是一个例子,它给出了一个错误:
“指向成员的选择类类型不兼容(“B”和“A”)”
这是代码,我做错了什么?
#include <iostream>
using namespace std;
class A {
private:
public:
void fA(int x) {
cout << "hello" << endl;
}
void fB(int x) {
cout << "good bye" << endl;
}
A() {
}
};
class B {
private:
void (A:: * f)(int) = NULL;
public:
B(void (A:: * f)(int)) {
this->f = f;
}
void call() {
(this->*f)(10); //What's wrong here?
}
};
A a = A();
B b = B(&(a.fA));
B b2 = B(&(a.fB));
int main(void) {
b.call();
b2.call();
}
回答
&(a.fA)是不是合法的C ++语法。&A::fA是。如您所见,此语法的任何地方都没有类型 A 的对象。&A::fA是只是一个指向成员函数,而不是一个指针到构件一起与-一个对象的组合。
现在为了调用指向成员的指针,您需要一个 class 对象A。在课堂上B,你没有。您需要以某种方式在那里获得一个,并以这种方式调用该函数:
(a->*f)(10);
wherea是指向 class 对象的指针A。