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?
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?
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.
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);
...
Etes-vous sûr de tirer le bon compilateur? Avez-vous gcc_select ?
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 ...