std :: thread类方法错误

时间:2015-02-18 19:14:00

标签: c++ multithreading c++11 std stdthread

我正在尝试创建线程以在基于网格的地形上逐行运行(我不会问这是否有效,我只是测试了一些东西)但我不断遇到2个错误:

首先是如果我没有将函数作为

传递
&DJM::Terrain:GenBlocks

编译器告诉我追加&在开始时但是当我使用引用时,它给了我一个与xmemory连接的单独错误

error C2248: 'std::thread::thread' : cannot access private member declared in class 'std::thread'
1>          d:\program files\visual studio 2012\vc\include\thread(73) : see declaration of 'std::thread::thread'
1>          d:\program files\visual studio 2012\vc\include\thread(32) : see declaration of 'std::thread'

我真的不明白为什么。我已经在多个地方读过你应该将 this 作为第二个参数但是它给出了与上面完全相同的错误。我也尝试将 i 作为std :: ref传递,但是会出现同样的错误。

    for(size_t i = 0; i < mHEIGHT; ++i){
            std::thread t(&DJM::Terrain::GenBlocks, &i);
            mThreads.push_back(t);
    }

    for(std::vector<std::thread>::iterator iter = mThreads.begin(); iter != mThreads.end(); iter++){
            iter->join();
    }

相当大的代码文件,所以我宁愿不发布整个类,但如果我发布的代码没有立即错误,我很乐意发布剩下的代码。请注意,mThreads存储为成员变量。

1 个答案:

答案 0 :(得分:3)

std::thread s无法复制。将其移动到矢量中:

mThreads.push_back(std::move(t));