PDA

Visualizza la versione completa : [C++] Passaggio parametri fstream a una funzione


Prog13
08-01-2013, 22:41
Salve, devo creare due funzioni di una classe che memorizzino e leggano dati su/da file di testo.
Questi sono i prototipi:

virtual void memorizza_dati(ofstream &);
virtual void visualizza_dati(ifstream &);

e queste le implementazioni:


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.

oregon
08-01-2013, 23:00
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



OutFile.open(buffer, ios::out | ios::app);

e

InFile.open(buffer, ios::in);

Prog13
08-01-2013, 23:03
Giusto mi era completamente passato di mente stessi usando un costruttore in quel modo! Grazie mille per la disponibilitÓ e per l'aiuto :)

MItaly
08-01-2013, 23:17
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).

Loading