C ++线程错误:没有类型命名的类型

时间:2016-11-26 10:28:02

标签: c++ multithreading methods pthreads

我正在尝试在我班上的方法中第一次使用线程。

这是我的代码的简化版本,导致相同的错误。

let savedImage = SavedData.image(for: self)
print(savedImage!)

在实际代码中,我希望每个线程都填充更大的向量块。

我在Clion项目中使用CMakeLists.txt文件:

#include <thread>
#include <iostream>
#include <memory>
#include <vector>

class Foo{
public:
    std::vector<int> DoThing() {
        return {1};
    }

    std::vector<int> DoThingMultiThread(unsigned int threads) {
        std::vector<int> values;
        std::vector<std::thread> threadVec(threads);
        for (unsigned int i = 0; i < threads; ++i)
        {
            threadVec.at(i) = std::thread(&Foo::DoPartialThing, this, i, i, std::ref(values));
        }
        return values;
    }
private:
    void DoPartialThing(unsigned int value, unsigned int position, std::vector<unsigned int> &container) {
        container.at(position) = value;
    }

};

我是否包含标志-pthread与编译无关,它总是给出:

cmake_minimum_required(VERSION 3.6)
project(ThreadTest)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS -pthread)

set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)

set(SOURCE_FILES main.cpp foo.hpp foo.cpp)
add_executable(ThreadTest ${SOURCE_FILES})

我见过很多与此类似的问题,但是他们都没有在线程构造函数中使用this参数,或者没有使用ref。我的猜测是我将pthread与错误联系起来,但这只是猜想。

1 个答案:

答案 0 :(得分:1)

std::vector<int> values;

... std::vector<unsigned int> &container) { ...

std::vector<int>std::vector<unsigned int>是不相关的类型。没有从一个转换到另一个。