You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正作为参数传递的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:03:23