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

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::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?

1

Nie znaleziono funkcji pust_back która przyjmuje struct dane2.

1

Masz wektor stringow, a Dodajesz do niego structure dane2.

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;
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++;
    }
1

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

0

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

0

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

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?

0

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

1

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]});
}
0

Biorąc pod uwagę wszystko co pisali tutaj inni kombinowałem i wreszcie rozwiązałem mój problem:) Edit. Usprawnenie.

//Wyżej w globalnych jest
int licznik2=0;
vector <dane2> przesyl2;



int wczytajp2()
{
    ifstream plik;
    string linia;
    plik.open("Plik2.txt",ios::in);
    while(getline(plik,linia))
    {
        stringstream test(linia);
        string segment;
        vector<string> zpodzielone;
        while(getline(test, segment, ';'))
        {
            zpodzielone.push_back(segment);
        }
        przesyl2.push_back(dane2{zpodzielone[0],zpodzielone[1],zpodzielone[2]});
        zpodzielone.clear();
        licznik2++;
    }
    plik.close();
}

To jest kod który mi właściwie działa.

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