Wektor obiektów i dostanie się do niego

0

Napisałem sobe taką funkcje:

vector<Pytanie> pytanka(fstream &plik) //odczyt pliku i alokacja pytan w pamieci
{
 	plik.open("slowka.txt", ios::in);
 	
 	vector<Pytanie>pytanka;
 	
 	
 	size_t nr=1; //zmienna przechowujaca numer aktualnej linii
 	vector<Pytanie> *wskaznik;
 	*wskaznik=pytanka;
 	
 	string linia;
 	
	Pytanie bufor; 
	
	while(getline(plik, linia))
	{
		if(nr%2==0)
		{
			bufor.niemiecki=linia;
		} else if(nr%3==0){
			bufor.polski=linia;
		} else{
			bufor.trudnosc=atoi(linia.c_str());
		}
		
		if(nr%3==0)
		{
			*wskaznik->push_back(bufor);
			wskaznik++;
		}
		
		nr++;
	}
	
 	
 	return pytanka;
		
} 

Wywala mi taki błąd przy wywolaniu funkcji push_back na wartosci wskaznika na wektor:
[Error]void value not ignored as it ought to be

Próbowałem już używać iteratorów ale bez skutecznie oraz próbowałem używać indeksów wektora np pytania[x].push_back() to też nie działało i wywalało jakiś błąd. Jak sie dostać do konkretnego elementu tego wektora?

1

Błąd wynika z faktu, że:

*wskaznik->push_back(bufor);
// jest równoważne
*(wskaznik->push_back(bufor));
// gdy Ty chcesz
(*wskaznik)->push_back(bufor);

Natomiast Twój problem wynika z tego, że nie znasz interfejsu wektora i źle go używasz.

*wskaznik->push_back(bufor);
wskaznik++;

Co niby wskaznik++ ma robić? Przecież wskazuje na cały wektor, a nie jego elementy. Poza tym jaki jest sens istnienia tego wskaźnika? Do tego źle go inicjalizujesz, ale to już historia na inną bajkę.

Wywal wskaźnik i zastąp te 2 linijki jedną

pytanka.push_back(bufor);
0

próbujesz przypisać do wskaźnika na wektor vector<Pytanie>*wskaznik wektor vector<pytanie>pytanka ale.
Do wskaźnika nie możesz przypisać obiektu.
Poza tym zachodzi konfiikt nazw.
Funkcja nazywa sie pytanka (nazwa funkcji to automatycznie jej adres), wektor nazywa sie pytanka.
Najlepiej napisz to od nowa.

0

Wywal wskaźnik i zastąp te 2 linijki jedną

pytanka.push_back(bufor);

Problem polega na tym, że ja chce sie odwołać do konkretnego elementu tego wektora i chce żeby on sie zwiększał co 3 iteracje pętli, jak to zrobić?

Próbowałem jak ze zwykłą tablicą:
pytanka[numer].push_back(bufor);
ale takie coś nie działa.

Jak to zrobić?

0
krecik1334 napisał(a):

Problem polega na tym, że ja chce sie odwołać do konkretnego elementu tego wektora i chce żeby on sie zwiększał co 3 iteracje pętli, jak to zrobić?

Jakiego elementu? Przecież ten wektor jest pusty i dopiero podczas czytania z pliku wpisujesz do niego elementy. Twój kod mówi wczytaj linie z pliku i co trzecią wrzuć do wektora.

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