Tekstowe RPG wysypuje się po podaniu nazwy gracza

0

Witam, pisze tekstową gre na zaliczenie. Niestety na starcie po wpisaniu nazwy gracza gra sie wysypuje. Gdzie zrobiłem błąd?
Nie wydaje mi się, że to błąd fstream (który wyświetla intro gry) tylko bardziej chodzi o vector. ( funkcja void jest wywoływana w case 1 w menu) WELP

#include <iostream>
#include <fstream>
#include <windows.h>
#include <string>
#include <vector>

using namespace std;




struct Character // postac i jej statystyki
{
	string name;
};
vector <Character> postac;

void charcre(vector <Character> postac)
{
    string name;
	system("cls");
	cout << "o==[]::::::::::::::::> TWORZENIE POSTACI <::::::::::::::::[]==O"  << endl;
  	cout << "---------------------------------------------------------------"  << endl;
  	cout << endl;
  	cout << " IMIE TWOJEJ POSTACI: "; 
	cin >> postac[1].name ;
	getchar();
    
     ifstream plik;
     plik.open("charcre_intro.txt");
     char output[1000];
     if (plik.is_open()) 
	    {
            while (!plik.eof()) 
			{
               plik >> output;
               cout<<output;
             }
        }
}
int main()
{
	vector <Character> postac;
	int wybormenu;
	cout << "o==[]::::::::::::::::> SUPER GRA FANTASY 3 <::::::::::::::::[]==O" << endl;
	cout << "----------------------    MENU GLOWNE      ----------------------" << endl;
	cout << " 1. GRAJ " << endl;
	cout << " 2. WYJDZ " << endl;
	cout << " WYBOR: "; cin >> wybormenu;
	switch(wybormenu)
	{
		case 1: 
		        charcre(postac);
		        getchar();
		        cout << " XXX " << endl;
		        cout << " XXX  " << endl;
		        cout << " XXX " << postac[1].name << endl;
		break;		          
        case 2: 
		        exit(0); 
		break;	
	}
	
	return 0;
}

0
cin >> postac[1].name ;

Próbujesz dostać się do drugiej osoby w wektorze postac który jest pusty i nie ma żadnych osób.

Musisz najpierw stworzyć postać (zmienną typu Character) i dodać ją do wektora za pomocą np. push_back.

0

okej zrobiłem tak jak napisałeś i wszystko gra ale kiedy próbuje później wywołać to imie to program znowu się wysypuje

Character b;
    b.name;
	
	system("cls");
	cout << "o==[]::::::::::::::::> TWORZENIE POSTACI <::::::::::::::::[]==O"  << endl;
  	cout << "---------------------------------------------------------------"  << endl;
  	cout << endl;
  	cout << " IMIE TWOJEJ POSTACI: "; 
	cin >> b.name ;
	postac.push_back(b);
	getchar();
    system("cls");

fragment gdzie próbuje wywołać imie:

 charcre(postac);
		        cout << endl;
				cout << "                           JEGO IMIE TO: " << postac[0].name << endl;
				getchar();
		        

co zrobiłem źle?
WELP

0

U Ciebie wektor jest przekazywany przez wartość (kopię) a więc dodanie elementu do wektora w funkcji doda go to lokalnej kopii.

Musisz przekazać wektor przez referencję:

void charcre(vector<Character> &postac)

1 użytkowników online, w tym zalogowanych: 0, gości: 1