std :: thread错误(线程不是std的成员)

时间:2010-03-25 21:39:19

标签: c++ multithreading gcc c++11 std

我编译了&使用macports安装gcc4.4。

当我尝试使用 - >进行编译时g ++ -g -Wall -ansi -pthread -std = c ++ 0x main.cpp ...:

 #include <thread>
 ...
  std::thread t(handle);
  t.join();
 ....

编译器返回:

 cserver.cpp: In member function 'int CServer::run()':
 cserver.cpp:48: error: 'thread' is not a member of 'std'
 cserver.cpp:48: error: expected ';' before 't'
 cserver.cpp:49: error: 't' was not declared in this scope

但是std::cout <<...编译得很好..

任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:14)

gcc还不完全支持std :: thread:

http://gcc.gnu.org/projects/cxx0x.html

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html

在此期间使用boost::thread

修改

虽然以下编译并使用gcc 4.4.3运行正常:

#include <thread>
#include <iostream>

struct F
{
  void operator() () const
  {
    std::cout<<"Printing from another thread"<<std::endl;
  }
};

int main()
{
  F f;
  std::thread t(f);
  t.join();

  return 0;
}

编译

g++ -Wall -g -std=c++0x -pthread main.cpp

a.out的输出:

Printing from another thread

您能提供完整的代码吗?也许在那些... s潜伏着一些模糊不清的问题?

答案 1 :(得分:5)

删除 -ansi ,这意味着-std = c ++ 98,你显然不想要它。它还会导致定义宏__STRICT_ANSI__,这可能会改变标题的行为,例如:通过禁用C ++ 0x支持。

答案 2 :(得分:2)

我在使用MinGW的Windows上遇到了同样的问题。我在github上发现了包装类mingw-std-threads包括在内 mingw.mutex.h,mingw.thread.h文件到全局MinGW目录修复了这个问题。我所要做的就是包含头文件,我的代码保持不变

#include "mingw.thread.h"

...
std::thread t(handle);
...

答案 3 :(得分:0)

我尝试使用GCC 4.4.1的Ubuntu,它就像一个魅力。 问题是Mac OS X具体,现在只需要找出原因......

答案 4 :(得分:0)

你确定你正在使用正确的编译器吗?你有gcc_select吗?