Итак, у меня есть текстовая игра на C++. Я написал класс Hero. Я также написал базовый класс под названием Item и его подкласс под названием Weapon (идея состоит в том, чтобы иметь Weapons, Potions, QuestItems и т. д., которые наследуются от класса Item). Таким образом, я могу сделать так, чтобы у моего «Героя» был переменный инвентарь экземпляров предметов. Я хотел, чтобы это было динамично на случай, если Герой получит улучшения для своего хранилища.
Итак, мой класс Hero имеет переменную-член/экземпляр, которая представляет собой динамический массив указателей на элементы. Я объявляю это, а затем перебираю его, устанавливая для каждого элемента новый элемент следующим образом:
Item** inventory = new Item*[15];
for (int i = 0; i < 15; i++)
inventory[i] = new Item();
Это произошло в функции void Init() класса Hero, которую вызывают все конструкторы (гибкая конструкция). Итак, я попытался написать функцию-член, чтобы добавить элемент в первый «пустой» слот в инвентаре, но это довольно сложно, и я не мог понять, что приводило к сбою моей программы, когда я тестировал ее. В конце концов я понял, что это зависало, когда я пытался получить доступ к элементу массива. Теперь у меня есть только этот фрагмент, который предполагает, что первый элемент пуст, и пытается «добавить» элемент, указанный в этом индексе в массиве:
void Hero::AddToInventory(Item *item)
{
*inventory[0] = item;
}
А вот как я назвал метод в main():
int main()
{
Hero *player = new Hero("Joe");
Item *primaryWeapon = new Item("Dagger");
player->AddToInventory(primaryWeapon);
return 0;
}
Любая помощь приветствуется; Я просто немного заржавел в своих динамических объектах и структурах данных на С++. Заранее спасибо!
P.S. Я знаю, что это можно сделать проще с векторами, но я еще не научился их использовать и хотел бы пока придерживаться динамических массивов.
I know this can be done simpler with vectors but I have not learned how to use those yet
Так почему бы не выучить их сейчас? На хороших курсах C++ вы все равно сначала изучаете вектор и держитесь подальше от безумия указателей, пока не приобретете опыт, чтобы знать, что вы делаете. Если ваша цель — разработать текстовую игру, не будет ли интереснее сосредоточиться на разработке самой игры? - person PaulMcKenzie   schedule 23.10.2014std::vector<Item>
, то ваш методAddToInventory
будетvoid Hero::AddToInventory(Item const & item) { inventory.push_back(item); }
. Разве это не проще? - person cdhowie   schedule 23.10.2014std::vector
- person Lochemage   schedule 23.10.2014