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

C++函数指针失效问题:attachEvent传参报错原因咨询

问题分析与解决

兄弟,你这报错的原因一眼就能看出来——你把函数调用操作当成函数指针传给attachEvent了!

错误根源

你代码里写的close()是直接执行这个函数,它的返回值是void;但看attachEvent的声明:

void attachEvent(sf::Event::EventType, void (*)());

它的第二个参数要求的是一个无参数、返回值为void的函数指针(也就是void (*)()类型)。你传的是close()执行后的void值,和要求的函数指针类型完全不匹配,编译器自然就报错了。

修正方案

方案1:直接传递函数名

函数名本身就代表指向该函数的指针,所以直接传close就行:

void close() { game.close(); }
int main(int argc, char** argv) {
    game.display();
    // 去掉括号,直接传函数名
    game.attachEvent(Event::EventType::Closed, close);
    while (game.isOpen()) {
        game.render();
    }
    return 0;
}

方案2:使用Lambda表达式(更灵活)

如果后续你需要绑定带参数的函数、类成员函数,或者想直接把逻辑写在这儿,用lambda会更方便:

int main(int argc, char** argv) {
    game.display();
    game.attachEvent(Event::EventType::Closed, [](){
        game.close();
    });
    while (game.isOpen()) {
        game.render();
    }
    return 0;
}

这样修改后,当游戏触发Closed事件时,就会执行你指定的关闭逻辑,完美解决问题~

内容的提问来源于stack exchange,提问作者MBJH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:29:34