no matching function for call to ‘async(std::launch, <unresolved overloaded function type>)’
时间: 2024-02-20 11:56:55 浏览: 194
no matching function for call to function (解决方案).md
这个错误通常是由于编译器无法确定 std::async 函数应该调用哪个重载函数引起的。在 C++ 中,函数重载是指在同一个作用域内定义多个函数,它们具有相同的名称但不同的参数列表。当你调用一个重载函数时,编译器会根据调用时传入的参数类型和数量来确定应该调用哪个函数。
为了解决这个问题,你需要明确告诉编译器应该调用哪个函数。你可以使用函数指针或函数对象来明确指定函数的类型。下面是一个使用函数指针的例子:
```c++
#include <iostream>
#include <future>
#include <chrono>
void download() {
// 模拟下载耗时
std::this_thread::sleep_for(std::chrono::seconds(7));
std::cout << "Download completed!" << std::endl;
}
int main() {
// 创建异步任务
std::future<void> download_future = std::async(std::launch::async, &download);
// 在主线程中执行其他任务
for (int i = 0; i < 10; i++) {
std::cout << "Main thread continues to work..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
// 等待异步任务的完成
download_future.get();
return 0;
}
```
在上面的例子中,我们使用函数指针 &download 明确指定了函数 download 的类型。这样,编译器就可以正确地解析 std::async 函数的参数,从而避免了上面的错误。
阅读全文