-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 退出程序,它才会继续工作。

所以我输入了我的第二个条目,但是当我尝试

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

第二个记录,它不起作用。它是空白的,但如果我 cout v1.size() ,它显示为 2

如何正常获取第二个元素记录并正常工作?

4

2 回答 2

4

v1 不是向量,也不是数组,而只是分配给单个对象的指针。因此v1[1]不是一个有效的对象。

new如果你想使用矢量,你可能根本不应该使用。(这是矢量,不是矢量)

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

您必须知道您的 Vehicle 对象需要是可复制的、默认可构造的和可分配的。

从您之前的问题来看,Vehicle 实际上是一个基类。因此,您需要一个指针向量。如果shared_ptr对您不可用(我假设unique_ptr不是),您将不得不使用它new来创建实际的底层类。Vehicle将需要一个虚拟析构函数,您需要稍后删除对象,因为std::vector不会为您删除指针。

于 2012-10-26T08:00:34.377 回答
0

也许问题与程序的这一部分有关:

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

你是在输入一个完整的句子吗?如果这样做,那么第一个空间之后的剩余部分将存储在输入缓冲区中,第二次循环将不起作用。

尝试以下操作:

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 回答