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
相关产品推荐
相关产品推荐

