-5

私はコードのベクトルを持っています

Vector<Vehicle> list
Vehicle *v1;

私は次のことをしました

string inVehicle;

cout << "Enter Vehicle Type";
cin >> inVehicle;

*v1 = new Vehicle;
v1->setName(inVehicle);

だから私は別のコードをします

cout << v1[0].getName() << endl;

結果は大丈夫ですが、別の値を追加すると、私のcin Enter車両タイプは、ユーザーキー5がプログラムを終了するまで無限であるスイッチケースであるため、機能し続けます。

だから私は2番目のエントリを入力しますが、試してみると

cout << v1[1].getName() << endl;

2番目のレコード、それは機能しません。ITは空白ですが、v1.size()をcoutすると、2と表示されます。

2番目の要素のレコードを正常に機能させるにはどうすればよいですか?

4

2 に答える 2

4

v1 はベクトルでも配列でもなく、単一のオブジェクトに割り当てられた単なるポインターです。したがってv1[1]、有効なオブジェクトではありません。

newvector を使用する場合は、まったく使用しないでください。(これはベクトルであり、ベクトルではありません)

std::vector<Vehicle> list;
list.push_back( Vehicle() );
list.back().setName( inVehicle );

Vehicle オブジェクトは、コピー可能で、デフォルトで構築可能で、割り当て可能である必要があることに注意してください。

前の質問から、Vehicle は実際には基本クラスのように見えます。したがって、ポインターのベクトルが必要になります。が利用できない場合shared_ptr(利用できないと思います) 、実際の基になるクラスを作成するためunique_ptrに使用する必要があります。仮想デストラクタが必要であり、ポインタを削除しないため、後でオブジェクトを削除する必要があります。newVehiclestd::vector

于 2012-10-26T08:00:34.377 に答える
0

おそらく、問題はプログラムのこの部分に関係しています:

cout << "Enter Vehicle Type";
cin >> inVehicle;

全文入力ですか?その場合、最初のスペースの後の残りの部分が入力バッファーに格納され、2 回目のループは機能しません。

次のことを試してください。

cout << "Enter Vehicle Type";
getline( cin, inVehicle );

#include ユーティリティが必要です。また、次のことも忘れないでください。

v1->setName(inVehicle);
list.push_back( v1 );

ただし、ベクトルの定義が間違っています。次のようにする必要があります。

vector<Vehicle *> list;

ベクターに追加する前に、新しいオブジェクトを作成することを忘れないでください。

v1 = new Vehicle;
v1->setName(inVehicle);
list.push_back( v1 );

お役に立てれば。

于 2012-10-26T08:04:35.903 に答える