无法解析命名空间成员“线程”

Posted

技术标签:

【中文标题】无法解析命名空间成员“线程”【英文标题】:Can't resolve namespace member 'thread' 【发布时间】:2018-02-06 12:17:33 【问题描述】:

我想用标准的 C++ 线程而不是 UNIX 线程来练习,但很快就遇到了一个问题,每当我写 std::thread CLion 时都会用红色下划线并说 Can't resolve namespace member 'thread'。我检查了我的 CMake 文件,它是为 C++11 设置的。我重新安装了最新版本的 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;
    ;

【问题讨论】:

CLion 下划线 不相关。它编译了吗? 你得到什么错误信息? OT:#define BUFFER_SIZE 3不要定义整数常量。使用const int 这段代码是错误的,因为你既不能join 也不能detach joinable thread 销毁之前的对象。 @DanielLangr 你是对的,但我确信错误不是因为缺少joindetach 【参考方案1】:

您能否确定该库是否在 CLion 工具链中可用?例如 Cygwin 确实有包含。

【讨论】:

它在外部库列表中,就在我的项目树下【参考方案2】:

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

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

C++11 std::threads vs posix threads

【讨论】:

检查了所有内容,标头已链接,但无法编译。我也尝试在eclipse上编译同样的错误。顺便说一句,一旦我写了#include &lt;thread&gt;,它就会出现在大纲中。另外我想提一下,std::cout 上没有错误突出显示,所以现在我正在考虑下载 cygwin。稍后我也会尝试在 Linux 上编译代码。 我在 Linux 上工作,当我遇到与库的链接错误时,我已经解决了类似的问题。看来您对 cygwin 安装的假设更有意义。您可以尝试在 Linux 上构建命令行,看看是否有效,如果有效,您可以尝试在 Cygwin 上安装其他软件包或重新安装。【参考方案3】:

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

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

目前解决方案是Cygwin,用它代替MinGW。

附:感谢@KillzoneKid 提供链接

【讨论】:

以上是关于无法解析命名空间成员“线程”的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 DOM 解析器读取带有命名空间前缀的 xml

WAP 转换期间无法解析 .aspx

Webpack 无法正确解析我的别名

使用 php SimpleXML 解析 XML 命名空间

『XML』XML/XSD命名空间解析

cElementTree解析XML文件使用iterfind无法找到指定元素的问题