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


以上是C++-使用指针调用另一个类的成员函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>