我正在关注线程的在线教程并收到错误消息"语义问题:尝试使用已删除的功能"。知道什么是错的吗?
#include <iostream>
#include <thread>
#include <string>
using namespace std;
class Fctor {
public:
void operator() (string & msg) {
cout << "t1 says: " << msg << endl;
msg = "msg updated";
}
};
int main(int argc, const char * argv[]) {
string s = "testing string " ;
thread t1( (Fctor()), s);
t1.join();
return 0;
}
答案 0 :(得分:0)
嗯,代码适用于VS2015,MS-Compiler,对代码进行了以下更改:
此
void operator() (string & msg) {
cout << "t1 says: " << msg << endl;
msg = "msg updated";
}
到
void operator() (std::string& msg) {
std::cout << "t1 says: " << msg.c_str() << std::endl;
msg = "msg updated";
}
和这个
string s = "testing string " ;
thread t1( (Fctor()), s);
到
std::string s = "testing string ";
Fctor f;
std::thread t1(f, s);
我改变的两件主要事情是msg.c_str(),因为流不带字符串,而是const char *。 其次,我将RValue Fctor()转换为LValue Fctor f并将f作为参数,线程显然不会使用RValues。