如何修正作为参数传递的C++类成员方法调用错误?
修正C++成员函数指针传递与调用的错误
我来帮你梳理下代码里的几个关键错误,一步步调整就能解决问题啦:
1. 修正timeCount调用时的参数错误
你当前调用timeCount时写的是:
timeCount(&Manager::passedFuction());
这是错误的——你这里是试图取passedFuction()函数调用结果的地址,但passedFuction是void类型(没有返回值),而且我们需要传递的是成员函数指针本身,不是函数调用的结果。正确的写法应该去掉括号:
timeCount(&Manager::passedFuction);
2. 修正成员函数指针的调用方式
成员函数指针和普通函数指针的核心区别是:它必须依附于一个类的实例对象才能调用。在timeCount这个成员函数内部,我们可以用当前对象的this指针来绑定调用,所以把错误的(*function)();改成:
(this->*function)();
这里的括号不能省略,因为->*运算符的优先级比函数调用()低,加括号是为了保证先完成成员函数指针和对象的绑定,再执行函数调用。
3. 修正头文件里的拼写错误
你头文件里的void (Manger::*function)(void)中,Manger是拼写错误,应该改成Manager,这个小细节也会导致编译失败,别漏掉。
修正后的完整代码示例
Manager.h
#include <iostream> class Manager{ public: void timeCount(void (Manager::*function)(void)); void passedFuction(); };
Manager.cpp
#include "Manager.h" void Manager::timeCount(void(Manager::*function)(void)) { std::cout << "It works\n"; (this->*function)(); // 正确的成员函数指针调用方式 } void Manager::passedFuction() { std::cout << "Passed function is called\n"; } // 调用示例 // Manager m; // m.timeCount(&Manager::passedFuction);
内容的提问来源于stack exchange,提问作者Fenrir
相关产品推荐
相关产品推荐

