我有一个代码为
的向量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输入车辆类型是一个开关案例,而无限直到用户键5退出程序,它将继续工作。
所以我输入第二个条目,但是当我尝试
时cout << v1[1].getName() << endl;
第二条记录,它不起作用。它是空白的,但如果我cout v1.size(),它显示为2
如何正常获取第二个元素记录并正常工作?
答案 0 :(得分:4)
v1不是一个向量,也不是一个数组,而只是一个已经分配给单个对象的指针。因此v1[1]
不是有效的对象。
如果你想使用矢量,你根本不应该使用new
。 (这是矢量,而不是矢量)
std::vector<Vehicle> list;
list.push_back( Vehicle() );
list.back().setName( inVehicle );
您必须知道您的Vehicle对象需要是可复制的,默认可构造且可分配。
从您之前的问题看,虽然看起来车辆实际上是一个基类。因此,您需要一个指针向量。如果您无法使用shared_ptr
(并且我认为unique_ptr
不可用),则必须使用new
来创建实际的基础类。 Vehicle
需要有一个虚拟析构函数,您需要在以后删除这些对象,因为std::vector
不会删除您的指针。
答案 1 :(得分: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 );
希望这有帮助。