std :: thread error (поток не является членом std) - PullRequest
21 голосов
/ 26 марта 2010

Я скомпилировал и установил gcc4.4, используя macports.

Когда я пытаюсь скомпилировать, используя -> 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 <<... компилируется нормально ..

Кто-нибудь может мне помочь?

Ответы [ 3 ]

14 голосов
/ 26 марта 2010

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 скрывается какая-то неясная проблема?

5 голосов
/ 26 марта 2010

Drop -ansi , это означает -std = c ++ 98, что вам явно не нужно. Это также вызывает определение макроса __STRICT_ANSI__, что может изменить поведение заголовков, например, отключив поддержку C ++ 0x.

2 голосов
/ 30 ноября 2016

У меня была такая же проблема на окнах при использовании MinGW.Я нашел классы-оболочки для in в github mingw-std-threads Включая файлы mingw.mutex.h, mingw.thread.h в глобальный каталог MinGW, эта проблема была устранена.Все, что мне нужно было сделать, это включить заголовочный файл, и мой код остался прежним

#include "mingw.thread.h"

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