I’m trying to create a simple text based game as a practice.
I created a character with a Vector for the inventory, but when I want to consume the item and remove it from the Vector I get an error: “Expression: cannot seek vector iterator before begin”
This is the character script where I try to consume the item:
#pragma once
#include <string>
#include <Vector>
#include "Vector2.h"
#include "BaseItem.h"
//Character.h
class Character
{
int type;
std::string name;
int hp;
int mana;
int power;
float speed;
Vector2 position = Vector2();
std::vector<BaseItem> inventory;
public:
std::string characterType[4];
Character(std::string new_name, int new_type);
void CharacterSetup();
void TakeDamage(int _damage);
void Attack();
void Move(Vector2 _direction);
void DisplayStats();
void AddToInventory(BaseItem _item);
void UseItem();
std::string GetName();
int GetHP();
Vector2 GetPosition();
private:
int current_hp;
int current_mana;
};
//Character.cpp
...
void Character::UseItem()
{
if (inventory.size() > 0)
{
int selectedItem = -1;
std::cout << "--Select your item:n";
for (int i = 0; i < inventory.size(); i++)
{
std::cout << i << " " << inventory[i].itemName << "n";
}
std::cin >> selectedItem;
if (!std::cin.good() || selectedItem < 0 || selectedItem >= inventory.size())
{
selectedItem = -1;
std::string dummy;
cin.clear();
cin >> dummy;
std::cout << "--Not such item in inventoryn";
}
else
{
inventory[selectedItem].ItemUse(*this);
BaseItem aux = inventory[selectedItem];
inventory.erase(inventory.begin() + (selectedItem - 1));
}
}
else
{
std::cout << "--Inventory empty!n";
}
}
...
And here is the Item code.
//BaseItem.h
#pragma once
#include <iostream>
#include <string>
class BaseItem
{
public:
BaseItem();
virtual void ItemUse(class Character& _c);
~BaseItem();
std::string itemName = "Item";
protected:
int value = 0;
};
#include "BaseItem.h"
BaseItem::BaseItem(){}
void BaseItem::ItemUse(class Character& _c)
{
std::cout << "Used " << itemName << "n";
}
BaseItem::~BaseItem()
{
}
New contributor
Juan Salice is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.