Подтвердить что ты не робот

Std:: thread error (thread not member of std)

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

Когда я пытаюсь скомпилировать с помощью → g++ -g -Wall -ansi -pthread -std = С++ 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 <<... компилируется отлично.

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

4b9b3361

Ответ 1

gcc полностью не поддерживает std:: thread:

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

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

Используйте boost:: thread тем временем.

Edit

Хотя следующий скомпилированный и запущенный для меня отлично с 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?

Ответ 2

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

Ответ 3

Ну, я пробовал Ubuntu с GCC 4.4.1, и он работает как шарм. Проблема связана с Mac OS X, теперь нужно только выяснить, почему...

Ответ 4

Вы уверены, что втягиваете правильный компилятор? У вас gcc_select?

Ответ 5

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

#include "mingw.thread.h"

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