web-dev-qa-db-ja.com

std :: threadエラー(スレッドがstdのメンバーではない)

Macportsを使用してgcc4.4をコンパイルしてインストールしました。

-> 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 <<...は正常にコンパイルされます。

誰か助けてもらえますか?

26
luis

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 ++-壁-g -std = c ++ 0x -pthread main.cpp 

a.outの出力:

別のスレッドからの印刷

完全なコードを提供できますか?たぶん、それらの...sに潜んでいる不明瞭な問題があるのでしょうか?

14
Artem Sokolov

ドロップ-ansi、それは明らかにあなたが望まない-std = c ++ 98を意味します。また、マクロ__STRICT_ANSI__を定義する必要があります。これにより、ヘッダーの動作が変更される場合があります。 C++ 0xサポートを無効にする。

5
Tronic

MinGWを使用しているWindowsでも同じ問題が発生しました。 githubのラッパークラスを見つけました mingw-std-threads mingw.mutex.h、mingw.thread.hファイルをグローバルMinGWディレクトリに含めると、この問題が修正されました。私がしなければならなかったすべてはヘッダーファイルを含めることであり、私のコードは同じままでした

#include "mingw.thread.h"

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

あなたは正しいコンパイラを利用していますか? gcc_select はありますか?

0
Chinasaur

まあ私はGCC 4.4.1でUbuntuを試してみましたが、それは魅力のように機能します。問題はMac OS X固有ですが、今はその理由を調べるだけです...

0
luis