這是我輸入串列車輛的代碼(可以是汽車或卡車)。但它不起作用和錯誤:'operator=' 不匹配(運算元型別是'Vehicle' 和'Car*')。我如何才能輸入車輛(可以是汽車或卡車)為真?
class Vehicle {};
class Car : public Vehicle {};
class Truck : public Vehicle {};
class ListVehicle {
Vehicle *pVehicle;
int n;
public:
void input() {
for (int i = 0; i < n; i ) {
int type;
cout << "Enter vehicle type (1: car, 2: truck): ";
cin >> type;
cin.ignore();
switch (type) {
case 1: {
pVehicle[i] = new Car();
break;
}
case 2: {
pVehicle[i] = new Truck();
break;
}
default:
cout << "Invalid type" << endl;
break;
}
}
}
};
uj5u.com熱心網友回復:
這是我的解決方法
list<Vehicle *> vehicles;
case 1:
{
Car *car = new Car();
car->input();
vehicles.push_back(car);
break;
}
case 2:
{
Truck *truck = new Truck();
truck->input();
vehicles.push_back(truck);
break;
}
uj5u.com熱心網友回復:
也許你打算這樣做:
std::array<Vehicle *, 50> pVehicle;
這將確保這pVehicle[i]是一個指標。
uj5u.com熱心網友回復:
我認為更重要的問題是您試圖增加 的記憶體地址pVehicle,即使您并不確切知道該物件的大小。為了解決這個問題,你能做的最好的就是使用標準之一。
如果您已經知道要存盤多少元素,并且您知道元素的數量不會增加,我建議您使用 std:array,否則如果您要增加通常添加的元素,我建議您使用 std::list (這個話題真的很密集,如果您需要了解更多資訊,請查看https://www.geeksforgeeks.org/linked-list-vs-array/?ref=leftbar-rightbar)。
enum vehicleOpt {car, track/*,.....*/}
class Vehicle {
pure virtual void foo();
};
class Car : public Vehicle {
void foo() override;
};
class Truck : public Vehicle {
void foo() override;
};
void main(){
std::list<vehicle*> vehicles;
//std::array<vehicle*, n> vehicles;
//....
switch(option){
case enumOpt::car:
auto vehicle = new Car();
break;
case enumOpt::track:
auto vehicle = new track();
break;
//..... as many case you need. also throw an error if not exist.
}
vehicle.foo();
vehicles.push_back(vehicle);
}
在這種方法中,我還嘗試使用車輛物件的多型性,并嘗試減少樣板代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/493798.html
上一篇:如果復制到小于參考大小的左值,初始化參考是否會占用更多記憶體?
下一篇:反應組件不使用路由渲染
