Visualizzazione dei risultati da 1 a 3 su 3

Visualizzazione discussione

  1. #1

    [C++] ofstream distrutto all'uscita della funzione

    Salve a tutti, mi sto cimentando con il C++ e sto facendo alcuni esercizi. Mi trovo a realizzare un piccolo esempio: costruire un vector di ostream e, attraverso una funzione mandare una stringa in tutti gli ostream del vettore. Ho quindi una funzione che costruisce questo vector di (puntatori a) ostream e lo inizializza inserendovi &cout e un &file. Se ciclo il vettore all'interno della funzione, i messaggi vengono correttamente riportati in tutti gli ostream, ma uscito dalla funzione e tornato al chiamante, l'output su cout viene correttamente riportato, ma l'output sull'ofstream su file invece genera un errore a me ancora abbastanza incomprensibile. Come se, all'uscita della funzione, quel puntatore a ostream presente nel vettore non fosse piú valido.
    Segue il codice sorgente compilabile e con stesso errore sia su compilatore ms (VS2019) sia su gcc. Potete dirmi per favore cosa c'é di concettualmente sbagliato?
    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    vector<ostream*> createStreams(const string& fileName) {
        vector<ostream*> result;
        result.push_back(&cout);
        ofstream lFile(fileName, ofstream::app);
        result.push_back(&lFile);
        for (ostream* ostr : result) {
            *ostr << "TEST in createStream function" << endl;
        }
        return result;
    }
    
    int main() {
        try {
            vector<ostream*> ostreams = createStreams("C:\\Users\\Armando\\Desktop\\testlog.txt");
            for (ostream* ostr : ostreams) {
                *ostr << "TEST in main function" << endl;
            }
        } catch (exception& e) {
            cerr << "Catched exception in main method: " << e.what() << endl;
        }
    }

    Ultima modifica di VegetaSSJ5; 21-12-2019 a 14:33

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.