C++ 转换为右值后,线程参数必须是可开票的
我目前正在尝试学习使用线程,但在向另一个线程中执行的函数传递参数时遇到了问题 void类::foocont string&a、size\u t b、Obj&c; 执行此函数的线程在类内声明 在最后一个例子中,我使用了文档中提到的std::ref,但仍然面临同样的编译错误 当我使用相同的原型在匿名命名空间中创建测试函数时,不会出现错误 在不同的线程中执行类方法是否有问题?怎么可能解决这个问题 以下是错误:C++ 转换为右值后,线程参数必须是可开票的,c++,C++,我目前正在尝试学习使用线程,但在向另一个线程中执行的函数传递参数时遇到了问题 void类::foocont string&a、size\u t b、Obj&c; 执行此函数的线程在类内声明 在最后一个例子中,我使用了文档中提到的std::ref,但仍然面临同样的编译错误 当我使用相同的原型在匿名命名空间中创建测试函数时,不会出现错误 在不同的线程中执行类方法是否有问题?怎么可能解决这个问题 以下是错误: /usr/include/c++/8/thread:120:17: error: stati
/usr/include/c++/8/thread:120:17: error: static assertion failed: std::thread arguments must be invocable after conversion to rvalues
static_assert( __is_invocable<typename decay<_Callable>::type,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
typename decay<_Args>::type...>::value,
若在非静态成员上使用invoke,则必须传递类的实例,否则将接受另一个重载,该重载不会将第一个参数标识为可调用
std::invoke(&Class::foo, instance_of_class, cref(charSet), b, ref(c) );
std::thread的情况也一样,其使用示例中甚至显示了这一点:
foo f;
std::thread t5(&foo::bar, &f);
我忘记将类对象作为参数传递。。。非常感谢大家 &类::foo,this,crefcharSet,b,refc
请将您的问题包括在内,以及您得到的实际错误,复制粘贴为文本!作为两个猜测,您是否记得将类对象作为第一个参数传递?你记得使用std::cref作为参数吗?我的灵力告诉我你忘记传递Class*或Class¶meter,指的是应该调用成员函数的对象。