0

rand() 関数をシードしようとしました

rand() で常に同じ乱数列を取得するのはなぜですか?

#include "stdafx.h"
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
#include <windows.h>
#include <string> 
#include <shlobj.h>
#include <Shlwapi.h>
#include <stdio.h>
#include <aclapi.h>
#include <tchar.h>
#include <iostream>
#include <fstream>
#include <curl/curl.h>
#include <future>
#include <stdlib.h>
#include <random>
#include <ctime>
#include <time.h>  
#include <Lmcons.h>
srand(time(NULL)); 
int random_integer = std::rand(); 

しかし、srand(time(NULL)) は以下を返しました:

エラー C4430: 型指定子がありません - int と見なされます。注: C++ は default-int をサポートしていません

エラー C2365: 'srand': 再定義。以前の定義は「関数」でした

4

1 に答える 1

3

現在の問題は、呼び出しsrand(time(NULL));が関数内に入る必要があることです-グローバルスコープでは、実行されるコードを書くことはできません-関数、変数などを宣言/定義することしかできません.

定義にはイニシャライザを含めることができます。これにより、int random_integer = std::rand();が機能します。

明らかな治療法:

int radom_integer;

int main() { 
    srand(time(NULL));
    random_integer = rand();
    // ...
}

とは言っても、一般的にはsrand/よりも C++ 乱数ジェネレーター クラスを使用する方が適切ですrand

于 2013-09-13T04:27:33.687 に答える