编译旧C++游戏源码报expression cannot be used as a function错误如何解决
错误原因
你收到的编译报错是代码尝试将指针类型直接作为函数调用触发的:
game.h:497:16: error: expression cannot be used as a function (_f2)(arg); ^
- 代码中
_f2是Task*类型的指针对象,不是可调用的函数/函数对象类型,C++标准不允许直接对指针变量使用()调用语法 - 该代码早年可编译是因为适配了语法检查宽松的旧版GCC编译器,这类编译器默认支持非标准的语法扩展,而Debian 10自带的GCC 8+版本默认关闭了此类非标准兼容,严格执行C++语法检查,因此触发编译错误。
修复方案
仅需要对_f2指针先解引用,再调用其重载的()运算符即可,将对应行代码修改为:
(*_f2)(arg);
修改后即可符合C++标准语法,正常完成编译,且不影响原有逻辑的多态调用效果。
内容的提问来源于stack exchange,提问作者The Ether
相关产品推荐
相关产品推荐

