Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    29

    [C++] Passaggio parametri fstream a una funzione

    Salve, devo creare due funzioni di una classe che memorizzino e leggano dati su/da file di testo.
    Questi sono i prototipi:
    codice:
    virtual void memorizza_dati(ofstream &); 
    virtual void visualizza_dati(ifstream &);
    e queste le implementazioni:

    codice:
    void Manoscritto::memorizza_dati(ofstream & OutFile){
     char buffer[20];
     cout << "Inserire il nome del file in cui memorizzare dati: ";
     cin >> buffer; OutFile(buffer,ios::out | ios::app);
     OutFile << Codice << " " << Autore << " " << numpag << " " << Formato << endl;
     OutFile.close();
     }
    
     void Manoscritto::visualizza_dati(ifstream & InFile){
    char buffer[20]; 
    cout << "Inserire il nome del file in cui memorizzare dati: "; 
    cin >> buffer; 
    InFile(buffer,ios::in); 
    InFile >> Codice >> Autore >> numpag >> Formato; InFile.close(); 
    }
    Solo che mi da questi errori:
    no match for call to `(std::basic_ofstream<char, std::char_traits<char> >) (char[20], std::_Ios_Openmode)'

    no match for call to `(std::basic_ifstream<char, std::char_traits<char> >) (char[20], const std::_Ios_Openmode&)'

    Che ho visto dipendono dal fatto che i parametri di stream sono passati dall'esterno (infatti dichiarandoli all'interno della funzione, va tutto liscio). Come posso correggere il codice per far passare i parametri di stream dall'esterno?
    Grazie in anticipo per l'aiuto.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se gli oggetti li hai già creati e li passi come argomenti, devi usare il metodo open per aprire lo stream non il costruttore ...

    Quindi

    codice:
    OutFile.open(buffer, ios::out | ios::app);
    
    e
    
    InFile.open(buffer, ios::in);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    29
    Giusto mi era completamente passato di mente stessi usando un costruttore in quel modo! Grazie mille per la disponibilità e per l'aiuto

  4. #4
    In ogni caso, normalmente quando una funzione deve lavorare genericamente su uno stream in scrittura (o in lettura), si tende a passare stream "generici" (ostream &, istream &) e già aperti nel caso che si tratti di file, in modo da poter usare la funzione su stream di più tipi, non necessariamente file (ad esempio, puoi passare alla tua funzione di scrittura un ofstream già aperto come anche cout).
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.