wake-up-neo.net

std :: thread error (Thread nicht Mitglied von std)

Ich habe gcc4.4 mit macports kompiliert und installiert.

Wenn ich versuche, mit -> g ++ - g -Wall -ansi -pthread -std = c ++ 0x main.cpp zu kompilieren ...:

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

Der Compiler gibt zurück:

 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

Aber std::cout <<... kompiliert gut ..

Kann mir jemand helfen?

20
luis

gcc unterstützt std :: thread noch nicht vollständig:

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

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

Verwenden Sie in der Zwischenzeit boost :: thread .

Bearbeiten

Obwohl folgendes kompiliert und für mich mit gcc 4.4.3 gut lief:

#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;
}

Zusammengestellt mit

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

Ausgabe von a.out:

 Drucken aus einem anderen Thread 

Können Sie den vollständigen Code angeben? Vielleicht lauert in diesen ...s ein obskures Problem?

14
Artem Sokolov

Drop -ansi bedeutet "-std = c ++ 98", was Sie offensichtlich nicht wollen. Es bewirkt auch, dass das Makro __STRICT_ANSI__ definiert wird, und dies kann das Verhalten der Kopfzeilen ändern, z. durch Deaktivieren der C++ 0x-Unterstützung.

5
Tronic

Ich hatte das gleiche Problem unter Windows mit MinGW. Ich fand Wrapper-Klassen für in in github mingw-std-Threads Einschließlich Mingw.mutex.h, mingw.thread.h-Dateien in globalem MinGW-Verzeichnis hat dieses Problem behoben. Alles was ich tun musste, war die Header-Datei einzuschließen und mein Code blieb derselbe

#include "mingw.thread.h"

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

Sind Sie sicher, dass Sie den richtigen Compiler verwenden? Hast du gcc_select ?

0
Chinasaur

Nun, ich habe Ubuntu mit GCC 4.4.1 ausprobiert und es funktioniert wie ein Zauber. Das Problem ist spezifisch für Mac OS X, jetzt muss nur noch herausgefunden werden, warum ...

0
luis