Wektor obiektów i dostanie się do niego

Odpowiedz Nowy wątek
2015-02-05 16:20
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?

Pozostało 580 znaków

2015-02-05 16:28
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);

Pozostało 580 znaków

2015-02-05 16:30
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.

edytowany 2x, ostatnio: Proxima, 2015-02-05 16:34
Nie, akurat nie przypisuje do wskaźnika, tylko do czegoś na co wskazuje ten wskaźnik, a co najprawdopodobniej nie jest obszarem pamięci należącym do niego. - twonek 2015-02-05 16:34
Masz racje, mój błąd. - Proxima 2015-02-05 16:40

Pozostało 580 znaków

2015-02-05 16:34
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ć?

edytowany 1x, ostatnio: krecik1334, 2015-02-05 16:38
To i tak nie zadziała, bo ten wskaźnik to kompletna bzdura. - Proxima 2015-02-05 16:35
No właśnie, nie zadziała, załóżmy że ten wskaźnik już skasowałem i co zrobić żeby sie odwołać do tego elementu tablicy? Jak można przepisywać na nowo funkcje w której nie działa tylko 1 rzecz i w dodatku nie wiem jak zrobić żeby działała? - krecik1334 2015-02-05 16:39

Pozostało 580 znaków

2015-02-05 16:38
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.

Ok już ogarniam o co chodzi chyba jednak przepisze tą funkcje ale już wiem że ten kod co podałeś będzie dobry. - krecik1334 2015-02-05 16:43

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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