0

なぜそれは明らかな答え以外のことを言っているのですか。また、これを回避するにはどうすればよいですか。このプロジェクトに c++11 コードを追加したくありません。

#include <random>

mingw 4.4 (QTSDK に同梱されているバージョンですが、QT ライブラリは使用していませんが、QT Creator のみです)

このファイルには、今後の \ ISO C++ 標準である C++0x のコンパイラとライブラリのサポートが必要です。このサポートは現在実験的であり、\ -std=c++0x または -std=gnu++0x コンパイラ オプションで有効にする必要があります。

4

4 に答える 4

6

ヘッダーは、<random>C++0xのc++標準にのみ追加されました。<random>標準ライブラリの実装者は、次の2つの理由のいずれかにより、C ++ 98モードで使用しようとするとエラーになるように、プリプロセッサディレクティブを挿入します。

ヘッダーファイルが新しいC++0x言語機能を利用している場合、デフォルトのC++98モードではまったく機能しません。C ++ 0xエラーメッセージは、「不明なキーワード」やその他のエラーメッセージの意味を理解するのではなく、なぜ機能しなかったのかを理解するためにあります。

ヘッダーファイルに新しいC++0x言語機能が必要ない場合は、C ++ 0xエラーメッセージが表示されるため、C++98で使用可能であると誤解して使用することはありません。それを行うとしたら、他の誰かが<random>ヘッダーをまったく出荷していないC ++ 98のみのコンパイラでコードをコンパイルしようとしました(たとえば、自分自身を制限してサポートする予定だった古いバージョンのGCC) C ++ 98)、彼らはかなり怒っているでしょう。

于 2012-10-22T22:37:24.197 に答える
5

ヘッダーは<random>C++0x (現在は C++11 と呼ばれています) にのみ存在します。

新しい標準なしで乱数を生成する場合は<cstdlib>、関数を含めて使用できrand()ます。

注:現在の時刻srand()などを使用している場合は、固有のものを使用することを忘れないでください。rand()

もう 1 つのオプション: を使用します。これはboost、C++11 標準ライブラリのほとんどがそれに基づいているためです。への切り替えboostは簡単ですが、boostこれが小さなプロジェクトの場合は大きすぎる可能性があります。

于 2012-10-22T22:31:25.163 に答える
1

C ++ 11を回避したい場合は、C ++ 11の代わりにBoostのランダムライブラリを使用できますが、1対1のポートではない場合がありますが、どちらも同じ機能を備えており、非常によく似ています。randこのソリューションは、Cの古い関数 ですべてのランダムビットを書き換えるよりもはるかに簡単です。ここでブーストランダムを参照してください。

于 2012-10-22T22:33:51.840 に答える
0

ランダム機能の TR1 バージョンを使用することもできますが、C++11 の使用が許可されている場合はお勧めしません。TR1 のランダム機能は、C++11 に移行したときに大幅に変更されました。

個人的な経験から言えば、gcc (libstdc++) では TR1 ライブラリはディープ メンテナンス モードになっています。標準コンポーネントのみが愛されます。

C++98 を使用する必要がある場合

#include <tr1/random>
...
   std::tr1::name_of_random_thing(...);
...
于 2012-10-23T02:56:10.077 に答える