przypisujesz nie statyczny obiekt w ogóle innej klasy
raczej chciałeś napisać
p_rightHand = backPack[ 1 ];
lecz to i tak nie zadziała.
dlaczego twoje metody load, equip itp zwracają int ? w sumie powinny zwracać, skoro tak zadeklarowałeś, a w zasadzie nic nie zwracają - błąd. Więc niech nic nie zwracają - czyli void
void equipItems();
a skoro chcesz coś tam sprawdzać w tych metodach, jakąkolwiek poprawność, użyj bool.
A tak w ogóle twój program nie będzie działał tak jak chcesz, gdyż
CItem Items( "", 0, 0, 0 );
Items.loadItems();
Player.equipItems();
co to w ogóle robi? tworzysz oddzielny obiekt Items, gdzie załadowujesz dane z pliku, po czym kolejno tworzysz oddzielny obiekt klasy Player, który nic nie ma wspólnego z obiektem Items stworzonym powyżej
przecież dla gracza stworzyłeś backpack, więc to z niego powinieneś załadowywać te itemki (skoro CItem posiada już wszystkie itemki, co chcesz załadowywać do backpack'a który też jest vectorem? pomyśl, vector elementów gdzie każdy z elementów będzie miał vector elementów wszystkich itemków?
Dlatego projekt wydaje się pogmatwany, w klasie CItem opisujesz jeden item, dlaczego więc ta klasa posiada vector wszystkich itemków? Lepiej jak stworzysz ten vector w klasie Player i załadujesz wszystkie, wtedy po prostu mógłbyś dawać sobie np.:
p_rightHand = backpack[1];
lub jeżeli gra będzie bardziej rozbudowywana, powinieneś stworzyć jakiś Items manager. Najłatwiej zamiast vectora z mapą itemków i dać taki backpack dla gracza, wtedy w ogóle łatwo by się obsługiwało, np.:
p_rightHand = backpack.getItem("Sword of Mephisto");
PS.: i oczywiście enkapsulacja - zero
Przyzwyczajaj się ustawiać jako private
private:
string name;
int atackMin;
int atackMax;
int defence;
public:
CItem();