无法解析命名空间成员'thread'

时间:2018-02-06 12:17:33

标签: c++ multithreading c++11 clion mingw-w64

我想用标准C ++线程而不是UNIX线程练习,但很快就遇到了问题,每当我写std::thread时,CLion用红色强调它并说无法解析命名空间成员'thread'。我检查了我为C ++ 11设置的CMake文件。我重新安装了最新版本的MinGW(6.3.0)并勾选了一个带有G ++编译器的盒子。我的朋友告诉我,他使用Cygwin,一切正常。但它仍然可以与MinGW一起使用吗?

#include <iostream>
#include <thread>

#define BUFFER_SIZE 3
#define PROD_NUM 3
#define CONS_NUM 2



void produce(){
    //production
}

void consume(){
    //consumption
}

int main() {
    std::cout << "Hello, World!" << std::endl;
    int i,j;
        std::thread producer(produce);
        std::thread consumer (consume);
    return 0;
}

代码本身几乎没有

修改 在线程库中有

#pragma GCC system_header

#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else

#include <chrono>
#include <functional>
#include <memory>
#include <cerrno>
#include <bits/functexcept.h>
#include <bits/functional_hash.h>
#include <bits/gthr.h>

#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)

namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION

  /**
   * @defgroup threads Threads
   * @ingroup concurrency
   *
   * Classes for thread support.
   * @{
   */

  /// thread
  class thread
  {
  public:
    // Abstract base class for types that wrap arbitrary functors to be
    // invoked in the new thread of execution.
    struct _State
    {
      virtual ~_State();
      virtual void _M_run() = 0;
    };

3 个答案:

答案 0 :(得分:0)

当CLion无法将代码链接到库时,它会显示红色。 它可能是主机环境变量错误。确保您的CMakeLists.txt正常工作,您的环境变量,标准库链接以及编译器设置都是正确的。 编译器版本和标准库兼容。 (例如,您使用的是交叉编译器(RasPi,Android),但环境变量显示主机库等会使其失败)

查看相关帖子,可能有所帮助。

C++11 std::threads vs posix threads

答案 1 :(得分:0)

好的,所以我终于解决了这个问题。我安装了Cygwin并在CLion Settings中手动链接了C / C ++编译器(出于某种原因,CLion无法自动检测它们)。清除所有并重新索引该项目。现在它没有显示任何错误和代码编译。

关于MinGW,我在cplusplus.com上阅读了一些有关该问题的帖子,但他们是关于MinGW的早期版本,据说他们最终修复了它,但我说:不,他们没有。 Here有一个很好的存储库,它的README文件表明win32的线程依赖于gthreads,但我发现我的库中的gthread文件一切似乎都没问题......所以仍然需要调查这个问题。如果您了解更多,请在此处写下您的想法和经验。

至于现在的解决方案是Cygwin,使用它而不是MinGW。

P.S。感谢@KillzoneKid了解链接

答案 2 :(得分:-1)

你能确定这个库是否在CLion工具链中可用吗?例如,Cygwin确实有include。