无法解析命名空间成员“线程”
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 你是对的,但我确信错误不是因为缺少join
或detach
【参考方案1】:
您能否确定该库是否在 CLion 工具链中可用?例如 Cygwin 确实有包含。
【讨论】:
它在外部库列表中,就在我的项目树下【参考方案2】:当 CLion 无法将代码与库链接时,它会显示红色。
这可能是主机环境变量错误。确保您的CMakeLists.txt
正常工作并且您的环境变量、标准库链接以及您的编译器设置正确。
编译器版本和标准库兼容。 (例如,您正在使用交叉编译器(RasPi、android),但环境变量显示主机库等会使其失败)
查看此相关帖子,它可能会有所帮助。
C++11 std::threads vs posix threads
【讨论】:
检查了所有内容,标头已链接,但无法编译。我也尝试在eclipse上编译同样的错误。顺便说一句,一旦我写了#include <thread>
,它就会出现在大纲中。另外我想提一下,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 提供链接
【讨论】:
以上是关于无法解析命名空间成员“线程”的主要内容,如果未能解决你的问题,请参考以下文章