Jak przez funkcje zwracać dane wczytane z pliku

0

Mam taki problem chce w funkcji loadFile załadować plik a w funkcji assignment chce wszystkie słowa dodac do kontenera;]
Mam coś takiego:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

fstream loadFile ();       //zaladowanie pliku
void assignment ( fstream& file );

int main()
{
    loadFile();
    assignment( file );
    return 0;
}

//==========================================================================================

fstream loadFile()
{
    fstream file;
    file.open( "dane.txt" , ios::in );
    if ( file.good() == false )
    {
        cout << "Plik nie istnieje" << endl;
    }
    return file&;
}
//==========================================================================================
void assignment(fstream& file )
{
    string line;
    vector<string> words;
    while( getline( file , line ) )
    {
        words.push_back(line);
    }

}

I mój problem polega na tym że nie wiem jak zwróci w return zmienna fstream próbowałem tak: return &file, return file&. Dopiero pierwszy raz robię na plikach i nie mam pojęcia jak to działa.

1

loadFile zwraca obiekt fstream przez kopię, a Ty próbujesz zwrócić fstream *. Operator & jest operatorem pobrania adresu (wskaźnika) z obiektu. W tym przypadku poprawna forma to return file

Poprawna funkcja powinna wyglądać tak.

fstream &loadFile()
{
    fstream file;
    file.open( "dane.txt" , ios::in );
    if ( file.good() == false )
    {
        cout << "Plik nie istnieje" << endl;
    }
    return file;
}

Ale tutaj jest jeszcze jeden błąd. Chcesz zwracać referencje do lokalnego obiektu, który zostanie zniszczony po wyjściu z funkcji loadFile. Najlepsze rozwiązanie to

void loadFile(fstream &file)
{
    file.open( "dane.txt" , ios::in );
    if ( file.good() == false )
    {
        cout << "Plik nie istnieje" << endl;
    }
}

int main()
{
    fstream file;
    loadFile(file);
    assignment(file);
    return 0;
}

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