web-dev-qa-db-fra.com

std :: erreur de thread (le thread n'est pas membre de std)

J'ai compilé et installé gcc4.4 en utilisant macports.

Lorsque j'essaie de compiler avec -> g ++ -g -Wall -ansi -pthread -std = c ++ 0x main.cpp ...:

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

Le compilateur retourne:

 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

Mais std::cout <<... compile bien ..

Quelqu'un peut-il m'aider?

20
luis

gcc ne supporte pas encore complètement std :: thread:

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

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

Utilisez boost :: thread en attendant.

Modifier

Bien que ce qui suit ait été compilé et fonctionne correctement pour moi avec 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;
}

Compilé avec

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

Sortie de a.out:

 Impression à partir d'un autre fil 

Pouvez-vous fournir le code complet? Peut-être y at-il un problème obscur qui se cache dans ces ...s?

14
Artem Sokolov

Drop -ansi , cela signifie -std = c ++ 98, ce que vous ne voulez évidemment pas. Cela entraîne également la définition de la macro __STRICT_ANSI__, ce qui peut modifier le comportement des en-têtes, par exemple. en désactivant le support de C++ 0x.

5
Tronic

J'ai eu le même problème sur Windows en utilisant MinGW. J'ai trouvé des classes wrapper dans github mingw-std-threads Y compris Mingw.mutex.h, les fichiers mingw.thread.h dans le répertoire global MinGW ont résolu ce problème. Tout ce que j'avais à faire est d'inclure le fichier d'en-tête et mon code est resté le même

#include "mingw.thread.h"

...
std::thread t(handle);
...
2
Vlad Bezden

Etes-vous sûr de tirer le bon compilateur? Avez-vous gcc_select ?

0
Chinasaur

Eh bien, j'ai essayé Ubuntu avec GCC 4.4.1 et cela fonctionne à merveille. Le problème est spécifique à Mac OS X, il suffit maintenant de savoir pourquoi ...

0
luis