PDA

Visualizza la versione completa : [C++] Programma con lista di oggetti


Pheromoth
31-01-2013, 17:35
Salve a tutti, vi chiedo un aiuto/qualche suggerimento sullo sviluppo di questo programma:


Si realizzi in C++ una gerarchia Manoscritto, Lettera. la classe Manoscritto è rappresenta un documento in formato elettronico, e può essere specializzato in una lettera. La classe Manoscritto contiene le seguenti variabili membro: - Codice, identificativo numerico (intero) - Autore (stringa allocata dinamicamente) - numpag, numero intero, numero di pagine - Formato, stringa allocata dinamicamente, formato del file La classe Lettera aggiunge le variabili membro: - Mittente, stringa allocata dinamicamente - Destinatario, stringa allocata dinamicamente Le classi devono prevedere gli opportuni costruttori, e devono gestire correttamente l’estensione dinamica fornendo le opportune funzionalità. Devono inoltre fornire le funzioni visualizza_dati e memorizza_dati. Si vuole un comportamento polimorfo. Si realizzi quindi una classe Elenco di manoscritti. La sessione di scrittura su file viene gestita dall’elenco mediante una sua opportuna funzione membro che definisce la variabile di tipo stream. La funzione memorizza_dati si limita a riceverla come parametro di ingresso. L'Elenco è realizzato ricorrendo ad un vettore allocato staticamente. La funzione di inserimento inserisce un manoscritto in ordine (rispetto al codice) e lancia una eccezione nel caso il codice sia già presente nell'elenco, la funzione di eliminazione elimina effettuando una ricerca per codice. L'eccezione è di tipo Duplicato, classe fornita dallo studente. Si strutturi il codice secondo le appropriate tecniche di programmazione modulare

Fino al punto in cui viene chiesto che le classi siano polimorfe, ho svolto il quesito.
Avrei realizzato anche il vettore statico che rappresenta l'elenco di Manoscritti, ma qui cominciano dei dubbi.
Nella compilazione, in corrispondenza della linea "ofstream outfile(a, ios::out);", mi viene dato l'errore "variable `std::ofstream outfile' has initializer but incomplete type ". Non riesco a capire a cosa si riferisca.
Questa linea, come vedete, fa parte dell'implementazione della funzione di scrittura su file che ho provato a realizzare.
Per l'ultima parte, non ho neppure provato a realizzare l'eccezione in quanto non capisco come posso realizzare una funzione di inserimento che metta i manoscritti in ordine.
Devo utilizzare un algoritmo di riordinamento che viene usato dopo ogni inserimento? Ed in che senso memorizza_dati si limita a riceverla come parametro in ingresso? Sta parlando della funzione delle due classi o devo definire una memorizza_dati anche per l'elenco?

Vi posto il mio codice:

manoscritto.h : http://pastebin.com/Ji3Nq35z
manoscritto.cpp : http://pastebin.com/4i9z59r6
lettera.h : http://pastebin.com/njq6xBnb
lettera.cpp : http://pastebin.com/jxhaGYdF
ElencoManoscritti.h : http://pastebin.com/Cmp8PfxC
ElencoManoscritti.cpp : http://pastebin.com/8P8egdGA

Vi ho messo tutto il codice, ma quello di maggior interesse è ElencoManoscritti.
Grazie mille in anticipo!

oregon
31-01-2013, 19:55
Hai fatto l'include di fstream ?

Pheromoth
02-02-2013, 14:14
No, in effetti... ma il programma la scrittura su file non mi funziona... c'è qualcosa di sbagliato nella funzione scrivi?

Per testarla farei una cosa del genere:
char a[21];
cout << "Scrivi il nome del file da creare: \n";
cin.getline(a,20);
scrivi(a);

Ma già ho un problema... il getline viene completamente ignorato!

oregon
02-02-2013, 14:31
Originariamente inviato da Pheromoth
No, in effetti...

Hai incluso quel file o no? Non ho capito ...

Pheromoth
02-02-2013, 18:33
si, scusami, ho scritto da cani xD
Intendevo dire, no, non l'avevo incluso. Ora l'ho incluso, però adesso ho questo problema

oregon
02-02-2013, 18:36
Ma quel codice con la getline in quale contesto è inserito ? Cosa c'è prima ?

Pheromoth
03-02-2013, 13:29
Niente, è solo un codice che inserisco nel main per testare la funzione che mi dovrebbe scrivere il manoscritto su un file di testo. Il char sarebbe il nome del file che si vuole creare

oregon
03-02-2013, 13:57
Dato che dici che la getline viene ignorata e a me non succede, prova a mostrare tutto il codice che compili, comprese le include e il main ...

Pheromoth
03-02-2013, 18:12
Ci sono tutti gli include, ho messo i link di pastebin:3

oregon
03-02-2013, 18:55
Originariamente inviato da Pheromoth
Ci sono tutti gli include, ho messo i link di pastebin:3

Sì, ma questa

cin.getline(a,20);

dove sta?

E comunque, non c'è un link unico per scaricare tutto il progetto sorgente?

Loading