2

c++0x を使用して最初のコードをコンパイルしようとしています。私は C++ にはかなり慣れていますが、これには困惑しています。以下はコンパイルされません。

#include <iostream>
#include <random>

int main()
{
   unsigned     seed = 12345;
   std::mt19937 generator(seed);

   std::uniform_real_distribution<double> distro1(0.0, 1.0);
   for (unsigned int i = 0; i < 25; i++)
   {
      std::cout << "Help" << std::endl;
      std::cout << "Value  ==  " << distro1(generator) << std::endl;
   }
}

私は次のようにコンパイルします:

g++ -std=c++0x myFile.cpp or with g++ -std=gnu++0x myFile.cpp

私が得ているエラーは次のとおりです。

myFile.cpp: In function ‘int main()’:
myFile.cpp:11: error: ‘uniform_real_distribution’ is not a member of ‘std’
myFile.cpp:11: error: expected primary-expression before ‘double’
myFile.cpp:11: error: expected ‘;’ before ‘double’
myFile.cpp:15: error: ‘distro1’ was not declared in this scope

G++ は次のとおりです。 g++ --version g++ (Debian 4.4.5-8) 4.4.5

奇妙なことに、それは mt19937 のインスタンス化を過ぎてコンパイルされ、呼び出すだけmt19937::operator()で期待どおりの出力が得られます。また、ディストリビューションを normal_distribution に切り替えると、コンパイルして「ヘルプ」行を出力しますが、他には何もしません。プロセスは を介し​​て実行されていることがわかりますps auxが、出力はありません。

私は愚かな何かを逃していますか?基本的に、mwe を表示するために cplusplus.com からコードをコピーしました。助けてくれてありがとう

4

1 に答える 1

2

コンパイラを新しいバージョンにアップグレードする必要があります (プログラムは GCC 4.7.2 で正常にコンパイルされます)。GCC 4.4.5 に同梱されている標準ライブラリの実装は、明らかに (完全に) C++11 に準拠していません。

于 2013-05-20T21:57:24.280 に答える