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

C++函数指针赋值报错:bool*无法赋值给bool(*)(int)类型实体

报错根本原因

你在is_mate函数中定义的形参名is_white,和全局定义的is_white函数重名了,在is_mate函数的作用域内,形参会遮蔽全局的函数名:

  • 你在is_mate里写&is_white时,编译器会认为你是取bool类型的形参is_white的地址,类型为bool*,和你声明的函数指针类型bool (*)(int)不匹配,因此报错
  • 而cover_fields函数里的形参名是piece_is_white,没有和全局函数重名,所以能正常识别&is_white是取全局函数的地址,无报错

解决方案

两种方案二选一即可:

  • 修改is_mate的形参名,避免和全局函数重名,比如改成is_white_turn:
// 修改前
bool is_mate(int** board, bool is_white=true)
// 修改后
bool is_mate(int** board, bool is_white_turn=true)
  • 取全局函数地址时加全局作用域限定符::,强制指定使用全局命名空间的is_white函数:
is_enemy = &::is_white;

额外逻辑错误提醒

你后续调用is_enemy函数指针时,括号位置写错了,会导致逻辑完全不符合预期:

// 错误写法:把 && 两侧的表达式全部塞进了is_enemy的参数里
is_enemy(board[row][col] && !is_checked(board, is_white))
// 正确写法:is_enemy只接收board[row][col]作为参数,再和后面的判断做&&运算
is_enemy(board[row][col]) && !is_checked(board, is_white)

你需要把所有调用is_enemy的位置的括号都修正过来,否则即使编译通过,功能也无法正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:45:04