C2661报错:std::thread不存在接受2个参数的重载函数问题求助
问题根因
你声明了using namespace std;,自定义的全局fill函数和标准库间接引入的std::fill模板函数产生了命名冲突。编译器构造std::thread时优先匹配到了标准库的std::fill(该函数需要3个参数),因此报错没有接收2个参数的重载。
修复方案(任选其一即可)
- 方案1:重命名自定义函数
将你的fill函数改为不会和标准库重名的名称,比如fill_list,对应修改线程构造代码为:thread th1(fill_list, str); - 方案2:明确指定全局作用域
不需要改函数名,在函数名前加全局作用域标记::,强制编译器调用你定义的全局函数:thread th1(::fill, str); - 方案3:移除
using namespace std;
移除该声明后所有标准库调用前添加std::前缀(比如std::list、std::thread、std::cout等),从根源避免命名冲突。
额外说明
你当前代码中线程是串行join执行,没有多线程数据竞争问题,修复命名冲突后即可正常运行。
内容的提问来源于stack exchange,提问作者4iel
相关产品推荐
相关产品推荐

