C++多线程程序参数传递相关编译报错问题求助
问题原因
核心错误是参数类型不匹配:你的coord函数第三个参数声明为bool acabados[N_BUSC],作为函数参数时数组会自动退化为bool*类型;但你在main函数中定义的acabados数组是int类型,传入std::thread时会退化为int*,int*无法隐式转换为bool*,因此触发编译期静态断言报错。
修复方案
只要保证参数类型匹配即可,两种可选修改方式:
- 将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); ... }
- 如果业务逻辑里
acabados确实需要为int类型,也可以将coord函数的第三个参数声明修改为int acabados[N_BUSC]。
额外注意事项
- 数组作为参数传递时本身传递的是首地址,你当前传递
v、acabados、resultados的写法是正确的,在coord中修改这些数组的内容会直接作用于main中的原数组,不需要额外加std::ref。 - 多线程访问共享变量时请做好同步操作,比如加互斥锁
std::mutex或者使用原子变量,避免出现数据竞争引发未定义行为。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

