std::线程类方法错误

std::thread class method errors

本文关键字:错误 类方法 线程 std      更新时间:2023-10-16

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

首先,如果我不通过的功能

&DJM::Terrain:GenBlocks

编译器告诉我附加&一开始,但当我使用引用时,它会给我一个连接到xmemory 的单独错误

error C2248: 'std::thread::thread' : cannot access private member declared in class 'std::thread'
1>          d:program filesvisual studio 2012vcincludethread(73) : see declaration of 'std::thread::thread'
1>          d:program filesvisual studio 2012vcincludethread(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存储为一个成员变量。

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

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