中没有错误编译
如何将对象传递给异步启动的函数?
#include <future>
#include <thread>
class SomeObject
{
void Dummy();
}
class A
{
public:
void Test1();
void Test2(SomeObject o);
void Test3(SomeObject &o);
}
A a;
auto a = std::async(std::launch::async, &A::Test1, a); // OK
SomeObject o;
auto b = std::async(std::launch::async, &A::Test2, a, o); // ERROR
auto c = std::async(std::launch::async, &A::Test3, a, std::ref(o)); // ERROR
启动函数T1没有错误。test2和test3需要一个对象参数,但是我会得到错误:没有过载函数std :: async的实例与参数列表匹配。
包含Fuller代码可能会有所帮助。例如,我立即看到一些问题:
- 您的班级声明不会在结束后的分子之后
- 您正在重新定义变量'a'
vs 2017中没有错误的以下校正的代码编译(不需要C 17):
#include <future>
#include <thread>
class SomeObject
{
void Dummy();
};
class A
{
public:
void Test1();
void Test2(SomeObject o);
void Test3(SomeObject &o);
};
void func()
{
A a;
auto d = std::async(std::launch::async, &A::Test1, a); // OK
SomeObject o;
auto b = std::async(std::launch::async, &A::Test2, a, o); // OK
auto c = std::async(std::launch::async, &A::Test3, a, std::ref(o)); // OK
}
剪切显示错误中的代码,班级声明结束时缺少半分号。它在G 版本7.3