Заранее спасибо за ответы.
store() - это функция класса Backpack, которая содержит массив указателей (Item * items). Аргументы, отправленные в store(), являются правильными (проверены, распечатывая их с помощью cout). displayInventory() по-прежнему печатает предыдущие элементы объекта Item в конце функции.
void store(string & name, float weight, int power, int slot)
{
items[slot] = new Weapon(name, weight, power); // Weapon is a derived class of Item
this->displayInventory();
}
Благодарю.
EDIT: исследование векторов сейчас.
Во-первых, вот несколько вещей, которые могут облегчить вашу жизнь (и жизнь тех, кто прочитает ваш код). Это упростит ваш код. Следовательно, это будет легче понять и отладить:
Пример:
void store(string & name, float weight, int power, int slot)
{
items[slot] = new Weapon(name, weight, power);
numItems+=1;
this->getInventory();
}
Здесь трудно понять, какова цель getInventory()
поскольку она начинается с get
, но ее возвращаемый тип void
. (Может быть, вы имели в виду buildInventory()
?)
В частности, вам не нужно переопределять name
, weight
и power
(и их получателей) в Weapon
, поскольку оно уже определено в Item
Это означает, что вы можете удалить строку Container(){;}
std::vector
а не пытаться обрабатывать указатели и массивы. Я уверен, что последний совет может сам по себе исправить вашу проблему. В частности, если вы используете vector<Item>
, вам больше не нужно будет манипулировать указателями. Это означает, что нет new
и больше не delete
.
items
, член правильно. Я бы рекомендовал использоватьstd::vector<std::unique_ptr<Item>>
вместо необработанного указателя (массива). Далее вы должны попытаться сузить свой вопрос, чтобы прибить свои проблемы. Как это: TL; DR;