调用Main将替换矢量对象并覆盖数据

Calling Main replaces vector object and overwrites data

本文关键字:对象 覆盖 数据 Main 替换 调用      更新时间:2023-10-16

我正在学习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;
}