РЕДАКТИРОВАТЬ - Благодаря вам, ребята, я устранил первоначальную проблему только распечатки адресов памяти вместо значений, но я все еще не получаю ожидаемый результат.Вот мой новый вывод:
Type: AA, Name: Energizer, Part Number: 123, Price: 29.99
- 1
Type: Plain, Name: Rainx, Part Number: 9876, Price: 9.99
- 1
Type: Round, Name: Firestone, Part Number: 5432, Price: 99.99
- 1
Type: Tire, Name: Firewheel, Part Number: 6666, Price: 49.99
- 1
Type: Wheel-Tire, Name: Best Wheel Tire Combo, Part Number: 2424, Price: 199.99
- 1
Type: Frame, Name: A-Frame, Part Number: 777, Price: 30000
- 1
Type: Engine, Name: Diesel, Part Number: 4444, Price: 8000
- 1
Обратите внимание, что каждая часть печатает только 4 поля - поля по умолчанию конструктора Auto_Part.Мои производные классы варьируются от 5 до 8 полей.Я попытался добавить ключевое слово virtual
в функцию Inventory::add_part()
, но у меня возникла ошибка сегментации: 11.Как это исправить?
У меня есть инвентарь автозапчастей. Я хочу распечатать весь инвентарь, однако моя функция печати печатает адреса памяти вместо значений .
У меня есть класс Auto_Part
, который является моим базовым классом, и несколько различных производных классов (Battery, Frame, Engine и т. Д.).Я передавал каждую часть функции Inventory::add_part
, используя следующий код:
nventory inventory;
Battery *bat = new Battery("AA", "Energizer", 123, 29.99, 2, 4, 9, 60);
Windshield_Wiper *ww = new Windshield_Wiper("Plain", "Rainx", 9876, 9.99, 24, "Skinny");
Wheel *wheel = new Wheel("Round", "Firestone", 5432, 99.99, "drag", "black", 24, 9, "Crossed");
Tire *tire = new Tire("Tire", "Firewheel", 6666, 49.99, "Drag_Racing", 32, 3, 16, "Great speed", "Loaded");
Wheel_Tire_Combo *wtc = new Wheel_Tire_Combo("Wheel-Tire", "Best Wheel Tire Combo", 2424, 199.99, "Drag Racing", 32, 3, 16, "Slow Speed", "Unloaded?", "Drag" , "black",25, 8, "Bolted");
Frame * frame = new Frame("Frame", "A-Frame", 777, 30000.00, "Solid Frame");
Engine * engine = new Engine("Engine", "Diesel", 4444, 8000.00, 8, "e85");
vector<Auto_Part*> parts;
parts.push_back(bat);
parts.push_back(ww);
parts.push_back(wheel);
parts.push_back(tire);
parts.push_back(wtc);
parts.push_back(frame);
parts.push_back(engine);
for (Auto_Part* ap : parts){
inventory.add_part(ap);
}
cout << inventory;
Вот моя функция add_part:
void Inventory::add_part(Auto_Part* part)
{
if(inventory.count(part) == 0)
inventory.insert(std::pair<Auto_Part*, int>(part, 1));
else
inventory.at(part) += 1;
}
А вот моя << перегрузка для печати:</p>
std::ostream& operator<<(std::ostream& ost, const Inventory& inv)
{
for(auto x : inv.inventory)
{
ost << x.first << " - " << x.second << std::endl;
}
return ost;
}
Тем не менее, когда я печатаю, я получаю адреса памяти вместо значений:
0x7fcce1402690 - 1
0x7fcce14026f0 - 1
0x7fcce14027e8 - 1
0x7fcce1402890 - 1
0x7fcce1402998 - 1
0x7fcce14029e0 - 1
0x7fcce1402a40 - 1
Я не уверен, где моя ошибка, хотя я полагаю, что это, вероятно, связано сдля меня не разыменование где-то.