调用Main将替换矢量对象并覆盖数据
Calling Main replaces vector object and overwrites data
我正在学习c++,我无法理解这个问题。我已经创建了一个类对象,其中包含车辆的信息。类名为vehicle
。这是类别:
class vehicle {
private:
string vehicleNumber;
int vehicleType;
public:
//Default Constructor
vehicle();
//Overload Constructor - @params<vehicleNumber, vehicleType>
vehicle(string vehicleNo, int type){
vehicleNumber = vehicleNo;
vehicleType = type;
}
//Some stuff to test
string getNo(){
return vehicleNumber;
}
int getType(){
return vehicleType;
}
};
现在我有一个void方法,它接受用户输入并将对象放入向量中。所以在我的main
:中
//Ref
void storeVehicle(vector<vehicle>&);
void storeVehicle(vector<vehicle>& createNewVehicle){
string number;
int type;
cout << "Enter Vehicle Number: ";
cin >> number;
cout << "Enter the vehicle type: ";
cin >> type;
vehicle newV(number, type);
createNewVehicle.push_back(newV);
cout << endl;
}
//
现在我面临的问题是。在我的主要方法中,我正在创建对象。这非常有效,除非我再次调用main方法,它会再次初始化对象,并且我丢失了以前的数据。我不知道该如何解决这个问题。
以下是主要方法:
int main(){
vector<vehicle> newVehicle;
storeVehicle(newVehicle);
return main();
}
所以这里我再次返回main()
,以便它重新运行。但当它发生时,我会丢失之前保存数据的向量。现在,我如何保存数据并继续调用storeVehicle方法?
编辑我还有一个开关案例,用于确定用户选择的选项。它可能是为了显示车辆信息,也可能是为了添加一辆新车。在这种情况下,我如何才能添加车辆而不丢失以前的数据。这是我的开关,它在另一种方法中:
void mainMenu(){
int option;
cin >> option;
switch(option){
case 1: {
vector<vehicle> newVehicle;
storeVehicle(newVehicle);
break;
}
default:
cout << "Wrong option";
}
}
所以现在在我的主方法中,我只是简单地调用这个switch方法。不管怎样,我丢失了数据,是吗?
编辑
我不明白为什么人们总是投反对票。我们不是来学习的吗?然而我却被投了反对票。stackoverflow迟早会阻止我提问。
Main不是这样使用的,它只是应用程序的一个入口点。
对于你想要做的事情,你会对循环感兴趣。这样,代码的某个部分可以重复运行,直到满足条件为止。
int main(){
vector<vehicle> newVehicle;
while(true)
{
storeVehicle(newVehicle);
}
return 0;
}
看看不同的循环类型是如何工作的。https://www.tutorialspoint.com/cplusplus/cpp_loop_types.htm
此外,在我的例子中的一个是一个无限循环,因为条件总是真的。
编辑问题已更改。
问题是,每次调用mainMenu函数时,都会重新创建向量。在Main函数中创建向量,然后通过ref将其传递到mainMenu函数中,这样它就可以传递到storeVehicle函数中。
int main()
{
vector<vehicle> newVehicle;
while (true)
{
mainMenu(newVehicle);
}
return 0;
}
void mainMenu(vector<vehicle>& createNewVehicle) {
int option;
cin >> option;
switch (option) {
case 1: {
storeVehicle(createNewVehicle);
break;
}
default:
cout << "Wrong option";
}
}
您必须添加一个标头才能使此函数工作
#include <limits>
void storeVehicle(vector<vehicle>& createNewVehicle) {
string number;
int type;
cout << "Enter Vehicle Number: ";
cin >> number;
cout << "Enter the vehicle type: ";
cin >> type;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
vehicle newV(number, type);
createNewVehicle.push_back(newV);
cout << endl;
}
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 专门化模板覆盖函数/避免对象切片
- 为什么销毁被放置 new 覆盖的对象不是未定义的行为?
- 当覆盖映射中的复杂对象键时,旧对象将被删除(C++)
- 我想覆盖运算符'='但是在重载之后,运算符没有将正确的信息传递给对象
- 为什么我的类节点覆盖自身而不是创建新的节点对象
- 调用Main将替换矢量对象并覆盖数据
- 错误消息:不允许抽象类类型 "X" 的对象:纯虚拟"Y"没有覆盖器
- C ++如何创建一个即使对象被覆盖也会持续存在的指针?
- 使用放置 new 覆盖内存中的对象
- 是否可以在不手动在C 中的每个派生类中添加覆盖的克隆方法来克隆多态对象
- 抽象类型的对象 - 覆盖不起作用吗?
- 覆盖组合对象的<<运算符会给出错误 C++
- 如何在Windows中注册COM(组件对象模型)?(用于图标覆盖处理程序)
- 通过使用覆盖操作员的代理来同步对象
- 派生类对象覆盖对象向量中的基类函数
- 3d对象覆盖-增强现实irrlight + opencv
- 我是否需要使用继承对象(相对于基对象)覆盖我的虚函数?
- vector的最后一个对象覆盖所有对象
- 比较同一类的 2 个对象(覆盖 == 运算符)c++