Как реализовать список исследований?

В игре уже есть система исследований. Проблема в том, что не могу ни в vector, ни в list затолкать класс "ResearchProject", чтобы можно было позже его "достать" и редактировать.

//Это ResearchProject.cpp
#include <SFML/Graphics.hpp>
#include "Objects.h";
#include "Learn.h"

using namespace sf;
using namespace std;
extern vector<String> bools;
extern ResearchProject Res;

void ResearchProject::load(string Codename, string Name, string Lore, string Mainlore, string texturest, int Rx, int Ry, int Need) {
    button.enable(Color(255,255,255,200),"learn/"+texturest,"");
    rx = Rx;
    ry = Ry;
    button.ok.setPosition(641+71*rx+1,151+71*ry+1);
    name = Name;
    lore = Lore;
    mainlore = Mainlore;
    codename = Codename;
    shape.setPosition(639.5 + 71 * rx, 149.5 + 71 * ry);
    shape.setRadius(37);
    need = Need;
}

void ResearchProject::draw(RenderWindow& w) {
    if (Res.codename==codename) {
        shape.setFillColor(Color(0, 255, 0, 255));
        w.draw(shape);
    }
    else if (find(bools.begin(), bools.end(), codename) != bools.end()) {
        shape.setFillColor(Color(255,200,0,255));
        w.draw(shape);
    }
    button.draw(w);
}
int ResearchProject::event(Event& e, Vector2i& mp) {
    if (find(bools.begin(), bools.end(), codename) != bools.end()) {
        return 0;
    }
    int ret=button.event(e,mp);
    return ret;
}

Всегда при прокрутке циклом или при получении через .back создаётся новый объект, идентичный исходному (Да, совсем не понимаю указатели). Нужное исследование пытался получать через метод:

ResearchProject findRP(String codename) {
    for (ResearchProject proj : projects) {
        if (proj.codename == codename) {
            cout << "founded " + proj.codename << endl;
            cout << &proj << endl;
            return proj;
        }
    }
}

Ещё стоит добавить, что при добавлении ResearchProject в список или vector, пропадает текстура и выдаётся ошибка:

an internal OpenGL call failed in Texture.cpp(98).
Expression:
   glFlush()
Error description:
   GL_INVALID_OPERATION
   The specified operation is not allowed in the current state.

Вот метод, который создаёт его, даёт текстуру и добавляет в список:

void Learn::load() {
    //...
    ResearchProject TMdef;
    TMdef.load("TMdef", "Тайм-менеджмент", "Основы управления временем. Без понимания\nэтих основ невозможно достойно управлять временем.", "Открывает исследования тайм-менеджмента.", "Ltime", 1, 0, 65);//"Ltime" - название файла текстуры, путь и формат позже дописывается в методе, всё работает вне списков.
    projects.push_back(TMdef);
    cout << &TMdef << endl;
    cout << &findRP("TMdef") << endl;
    cout << &projects.back << endl;
}

Ответы (1 шт):

Автор решения: koderkokoderov

В общем, решил проблему, изучив указатели. По простому, в vector-е, где хранились исследования, нужно было добавить "*" vector<ResearchProject*> Res, а позже все вызовы этого проекта использовать с rp->draw(w) вместо rp.draw(w).

→ Ссылка