2017-10-02 18 views
0

私は、名前、住所、および電話番号のオブジェクトクラスで構成されるpersonオブジェクトクラスを持っています。名前、住所、電話番号はランダムに生成されます。C++のループでランダム化されたオブジェクトを生成する

ユーザーは、ランダムな人々が生成するどのように多くの選択および機能は、ループでそれらを生成すると呼ばれ、ベクトルに格納:

vector<Person> pV; //vector of people 

for(int i = 0; i < num; i++){ 
    Person x; //create new person object x 
    pV.push_back(x) //add to vector of people 
    cout << pV[i].getName(); //print for text 
} 

問題は、生成されたすべてのオブジェクトが同じ(同一であり、さ名前、住所など)。同じセッション中に新しいリストを生成すると、異なる情報を持つ人物が生成されますが、それらはすべて同じになります。

これはJavaで発生する可能性がありますランダム化時に静的を使用する場合は...私はC + +で同等ののか分からない。

提案がありますか?

class Person{ 
public: 
    Person(); 
private: 
    Name name; 
}; 

Person::Person(){ 
    Name name; 
} 

ランダムな名前生成と名のクラスがある:次のように

Personクラスが設定されている次のように人のクラスが設定されている名前だけを使用して

おかげ

class Name{ 
public Name(); 
    string generateName(); 
private: 
    string name; 
}; 

Name::Name(){ 
    Name = generateName(); 
} 

string Name::generateName(){ 
    srand(time(NULL)); 
    string Names[5] = {"a", "b", "C", "d", "e"}; 
    int randomName = rand() % 5; 
    return Names[randomName]; 
} 
+3

[mcve]を付けてください。あなたはランダムな人々を構成するコードを表示していないので、どのように動作するのかを知ることができますか? –

+0

'P'コンストラクタで乱数ジェネレータをリセットまたは再シードしていないことを確認してください。 – user4581301

+0

@JohnColeman申し訳ありませんが、私は人と名前のクラスの最小限のバージョンを追加しました。 – Strobe00

答えて

1

srand(time(NULL));あなたが作成するすべての名前乱数ジェネレータを生成します。名前があまりにも速く生成された場合、1秒の解像度timeで同じシードが使用され、同じ乱数シーケンスが生成されます。

+0

これはまさにそれでした - ありがとう! – Strobe00

+0

@ Strobe00誰かがあなたの問題を解決する方法で質問に答えた場合、その答えに合格とマークする必要があります。 –

+0

@JohnColemanは、ありがとう! – Strobe00

関連する問題