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

C++多线程程序参数传递相关编译报错问题求助

问题原因

核心错误是参数类型不匹配:你的coord函数第三个参数声明为bool acabados[N_BUSC],作为函数参数时数组会自动退化为bool*类型;但你在main函数中定义的acabados数组是int类型,传入std::thread时会退化为int*,int*无法隐式转换为bool*,因此触发编译期静态断言报错。

修复方案

只要保证参数类型匹配即可,两种可选修改方式:

  1. 将main函数中acabados数组的类型修改为bool,对应修改后的代码如下:
int main(int argc, char *argv[]){
    bool leido = false; 
    VectInt v;
    // 把int改成bool,和函数参数类型匹配
    bool acabados [N_BUSC];
    int resultados [N_BUSC];

...

    thread coordinacion (&coord, v, std::ref(leido), acabados, resultados);

...
}
  1. 如果业务逻辑里acabados确实需要为int类型,也可以将coord函数的第三个参数声明修改为int acabados[N_BUSC]。
额外注意事项
  • 数组作为参数传递时本身传递的是首地址,你当前传递v、acabados、resultados的写法是正确的,在coord中修改这些数组的内容会直接作用于main中的原数组,不需要额外加std::ref。
  • 多线程访问共享变量时请做好同步操作,比如加互斥锁std::mutex或者使用原子变量,避免出现数据竞争引发未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:54:04