线程(尝试使用已删除的功能

时间:2015-08-23 21:56:34

标签: c++ multithreading

我正在关注线程的在线教程并收到错误消息"语义问题:尝试使用已删除的功能"。知道什么是错的吗?

#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;
}

1 个答案:

答案 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。