Nie wykrywa zmiennej/funkcji nie wiem do końca...

Odpowiedz Nowy wątek
2019-05-13 10:05

Rejestracja: 1 rok temu

Ostatnio: 1 dzień temu

0

Witam przepraszam że nie wiem do końca o co chodzi.
Otóż mam krotki kod.

struct dane1
{
    string nazwa;
    int ilosc;
    string skrot;
};

struct dane2
{
    string data,imie,dopisek;
};

int licznik=0;
vector <dane1> przesyl1;
vector <dane2> przesyl2;

int main()
{
    wczytajp1();
    for(int i=0; i<licznik; i++)
    {
        cout<<przesyl1[i].nazwa<<"    "<<przesyl1[i].ilosc<<"    "<<przesyl1[i].skrot<<endl;
    }
    fstream plik;
    string linia;
    plik.open("Plik2.txt",ios::in);
    while(getline(plik,linia))
    {
        stringstream wejscie{linia};
        string podzial {};
        vector <string> wyjscie;
        while(getline(wejscie, podzial, ';'))
        {
            wyjscie.push_back(dane2{wyjscie[0],wyjscie[1],wyjscie[2]});
        }
        wyjscie.clear();
    }
    plik.close();
    return 0;
}

Wszystko co związane z dane1 proszę zignorować bo działa poprawnie. Problem jest taki że wyświetla mi w pętli gdzie zapisuję już podzielone dane (linia 34) wprowadzone taki błąd:
no matching function for call to 'std::vector<std::__cxx11::basic_string<char> >::push_back(dane2)'|

Czyli nie znaleziono funkcji do wywołania w dane2? Dlaczego skoro w innych kodach tak robiłem i działało?

edytowany 2x, ostatnio: TenAnonim, 2019-05-13 10:06

Pozostało 580 znaków

2019-05-13 10:11

Rejestracja: 6 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Kraków

1

Nie znaleziono funkcji pust_back która przyjmuje struct dane2.

Ale dlaczego skoro jest nad tą pętlą? - TenAnonim 2019-05-13 10:12
wyjscie to vector <string> - szweszwe 2019-05-13 10:14
No zgadza sie dane sa przesylane do vectora potem vector ten przesyla do tablicy i jest czyszczony, wiec dlaczego jest ten błąd? - TenAnonim 2019-05-13 10:30
Bo chcesz wstawić strukturę do vectora który przechowuje stringi. - szweszwe 2019-05-13 10:32

Pozostało 580 znaków

2019-05-13 10:32

Rejestracja: 3 lata temu

Ostatnio: 4 godziny temu

1

Masz wektor stringow, a Dodajesz do niego structure dane2.


Pozostało 580 znaków

2019-05-13 10:34

Rejestracja: 5 lat temu

Ostatnio: 38 minut temu

1

Nie wykrywa, ponieważ przecież Twoje wyjście jest zdefiniowane jako wektor stringów:

vector <string> wyjscie;

A to, co Ty próbujesz tam wrzucić to struktura trzech stringów:

struct dane2
{
    string data, imie, dopisek;
};
dane2{ wyjscie[0],wyjscie[1],wyjscie[2] }

Jeśli rzeczywiście tak chcesz, to wyjście zdefiniuj jako wektor tych struktur:

vector <dane2> wyjscie;

Pozostało 580 znaków

2019-05-13 10:34

Rejestracja: 1 rok temu

Ostatnio: 1 dzień temu

0

Hmmm czyli jak to naprawić? I dlaczego np w tym przypadku wszytko mi działa?

struct dane
{
    string wojewodztwo;
    int women2013,men2013,women2014,men2014;
};

int main()
{
    ifstream plik;
    string linia;
    int linie=0;
    vector <dane> v_dane;

    plik.open("kraina.txt",ios::in);
    while(getline(plik,linia))
    {
        stringstream wejscie{linia};
        string rozbicie {};
        vector<string> output;
        while(getline(wejscie, rozbicie, ';'))
        {
            output.push_back(dane{output[0],stoi(output[1]),stoi(output[2]),stoi(output[3]),stoi(output[4])} );
        }
        output.clear();
        linie++;
    }

Pozostało 580 znaków

2019-05-13 10:36

Rejestracja: 1 rok temu

Ostatnio: 58 minut temu

1

Spróbuj zamienić vector <string> wyjscie; na vector <dane2> wyjscie; :)

edytowany 1x, ostatnio: nullpt4, 2019-05-13 10:36

Pozostało 580 znaków

2019-05-13 10:38

Rejestracja: 1 rok temu

Ostatnio: 1 dzień temu

0

Po zamianie vectora z string na dane2 są już 3 błędy:D

Pozostało 580 znaków

2019-05-13 10:46

Rejestracja: 6 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Kraków

0

Tak, a my wiemy ile było błędów i jakie są teraz bo jesteśmy wróżbitami.

Lepiej napiszę co chcę osiągnąć. - TenAnonim 2019-05-13 10:51

Pozostało 580 znaków

2019-05-13 10:48

Rejestracja: 1 rok temu

Ostatnio: 58 minut temu

1

https://www.onlinegdb.com/online_c++_compiler #kod który podałeś jako działający też nie działa :P
Pojawiają się błędy bo próbujesz inicjalizować strukturę tym samym wektorem w którym chcesz ją przechowywać:
output.push_back(dane{output[0],stoi(output[1]),stoi(output[2]),stoi(output[3]),stoi(output[4])} );

Rozumiem że raczej chodziło Ci o przekazanie tam danych z wejścia?

edytowany 2x, ostatnio: nullpt4, 2019-05-13 10:58
Tak, chcę przekazać tam dane z pliku w takiej kolejności w jakiej są wczytywane - TenAnonim 2019-05-13 10:49

Pozostało 580 znaków

2019-05-13 10:54

Rejestracja: 1 rok temu

Ostatnio: 1 dzień temu

0

Tak jak pisałem chcę wczytywać dane z pliku, dzielić po wystąpieniu znaku ; i potem zapisywać do struktury.

Pozostało 580 znaków

2019-05-13 10:55

Rejestracja: 1 rok temu

Ostatnio: 58 minut temu

Coś w tym stylu powinno zadziałać

vector <dane2> wyjscie;
vector <string> line; 
string str;
while(wejscie >> str )
{
    line.push_back(str);
}
 while(getline(wejscie, podzial, ';'))
{
    wyjscie.push_back(dane2{line[0],line[1],line[2]});
}
edytowany 5x, ostatnio: nullpt4, 2019-05-13 11:05
Pokaż pozostałe 3 komentarze
Wywalilem wszystko teraz dopisalem co musialem i jest okej, dzieki. - TenAnonim 2019-05-13 11:08
Super ! :) - nullpt4 2019-05-13 11:09
Ok po lepszym sprawdzeniu nie działa:D Ale dzięki za chęci i naprowadzenie;) - TenAnonim 2019-05-13 11:23
Dasz radę - nullpt4 2019-05-13 11:24
Tak zrobiłem już, udało się po małym kombinowaniu. - TenAnonim 2019-05-13 11:26

Pozostało 580 znaków

Odpowiedz

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