Изменение через вектор ссылок
Недавно писал код для игры на SFML, и возникла неожиданная проблема. Мне необходимо было выполнять определённую функцию элемента класса через вектор ссылок. В теории, должны были изменяться некоторые переменные, чего на практике не происходило (смешно, что в этот момент другие изменялись). Код с такой-же проблемой:
#include <iostream>
#include <vector>
using std::string;
string c = "none";
class Object
{
public:
short x;
short y;
void update()
{
std::cout << "X:" << x << " ; " << "Y:" << y << std::endl;
}
};
class Cube : public Object
{
private:
unsigned short s = 5;
bool t;
public:
Cube(short _x, short _y)
{
x = _x;
y = _y;
}
void edit()
{
if (t)
{
x = x + s;
y = y + s;
}
}
void update()
{
if (c == "edit") t = true;
else t = false;
Object::update();
}
};
int main()
{
std::vector<std::reference_wrapper<Cube>> cubes;
Cube cube(0,0);
cubes.push_back(cube);
while (c != "end")
{
std::cin >> c;
for (Cube i : cubes) { i.update(); }
}
return 0;
}
Извиняюсь за громоздкость кода, она была необходима в оригинальном коде для удобства использования.
Просьба при ответе писать что именно здесь неверно, а не просто отвечать на подобии "Убери лишний код", я хочу разобраться что не работает и почему (при данном ответе, пишите почему надо убрать определённый кусок кода, если без удаления уже не обойтись). Также просьба не писать оскорбительные комментарии с предъявлением моего незнания. Я это не отрицаю и хочу получить помощь новичку от опытных людей.
P.S. Наверное лучший способ помощи - скопировать код и запустить у себя. Для простого вывода x и y напишите что-либо кроме "edit", для изменения напишите это слово.
Спасибо.