2011-01-11 13 views
0

は、私はいつもcstdlibのランダムな機能のみのrandとsrand関数が、次の作品(のUbuntu 10.10上のG ++でコンパイルされた)と思っていましたか?それがあいまい(私は自分の「ランダム()」関数を宣言していた)のオーバーロードされたとのUbuntuへのWindowsから移動するときcstdlibでrandom()が動作するのはなぜですか? (Ubuntuの10.10)

私は実際にこれを発見し、私のコンパイルに失敗しました。

#include <cstdlib> 
#include <iostream> 

using namespace std; 

int main() { 
srandom(50); 
cout << random(); 
return 0; 
}; 

また、次はUbuntuの上で正しくコンパイル、それは)(ランダム)とsrandom(という、STDLIB.Hを確認した後に表示され、とりわけ、std名前空間で宣言されていません。それお尻の完全な痛みます...

#include <iostream> 
#include <cstdlib> 

int main() { 
    std::cout << random(); 
    return 0; 
}; 

答えて

2

コンパイラの作家があなたの仕事を容易にするために言語ライブラリに余分なものを追加するのは自由ですので。通常、問題にはならないでしょう。それは、あなたに物事を追加しない名前空間に入れます(std)。

あなたの問題は、コンパイラの作家は親切に提供されるものはほとんど行

using namespace std; 

これはstd::randomなど、あなたのプログラムの名前空間にstdからすべてを、引く、から生じます。

using std::rand; 
using std::srand; 

もC++よくある質問ライトからthis questionを参照してください:あなたが代わりに明示的にstdから引っ張っているものを宣言する場合は、ローカルrandomstd::randomであなた壊しません。 `` 、ない ``

+1

これは健全なアドバイスですが、私はそれはダニエルの問題に関連はないと思うので、私は、)(でもC++ 0xのがのstd ::を定義ランダムとは思いません。 –

+2

@JimはC++がstd :: randomを定義しないとは言いませんでした。実際、私は、コンパイラ作成者がC++標準ではない独自のものを自由に追加できると説明したと思います。 –

+0

助けてくれてありがとうPhil。 – dcousens

5

random()Single Unix Specificationの一部です。これはC++標準の一部ではありません。だからこそWindows上ではなく、ほとんどのUnix/Macプラットフォームで見つかったのです。

+0

。私はまだSUSがC++を説明するために更新されたとは思わない。 '含むUbuntuで – MSalters

+1

は、'依存関係として '' に引っ張ります。 – Nate

関連する問題