|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
Errore di compilazione con dev c++
Salve ragazzi
il compilatore mi da un errore nel momento in cui vado ad includere del file di definizione il file header mediante #include "studente.h" (nel momento in cui sscrivo questo mi comincia a dare errore)... da cosa può dipendere????? Grazie ed in attesa di una risposta Vi lascio i miei saluti |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Che errore ?
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
Il messaggio che mi appare è "In file included from studente.cpp"
Ciao |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
Questa è la dichiarazione e la definizione delle classi:
"studente.h" class Studente { private: int matricola; string nome,cognome; public: map<Materia,int> mv; Studente(int,string,string); void insert_mat_voto(Materia,int); int get_voto(Materia); int Media(); }; "materia.h" class Materia { private: string nome; public: list<Studente> ls; Materia(); void insert_Studente(Studente); void setNome(string); string getNome(); void cancellaStudente(Studente); }; "studente.cpp" #include "studente.h" Studente::Studente(int a,string b,string c) { matricola=a; nome=b; cognome=c; } void Studente::insert_mat_voto(Materia m,int v) { map<Materia,int>::iterator i=mv.find(m); if(i==mv.end()) mv[m]=v; else cout<< "Materia già presente." << endl; } int Studente::get_voto(Materia m) { map<Materia,int> iterator i=mv.find(m); if (i!=mv.end()) cout<< "Il voto è:" << (*i) << endl; } int Studente::Media() { map<Materia,int> iterator i; float totale=0; for(i=mv.begin();i!=mv.end();i++) totale=totale+mv[i]; float med=totale/i; return med; } // visto che il problema richiede di valutare lo studente con la media + alta // la vado a gestire nel main questa situazione "materia.cpp" #include "materia.h" Materia::Materia(string n) {nome=n; } void Materia::insert_Studente(Studente s) {ls.push_back(s); } void Materia::setNome(string n) {nome=n; } string Materia::getNome() {return nome; } void Materia::cancellaStudente(Studente s) {list<Studente>::iterator i; for(i=ls.begin();i!=ls.end();i++) {if((*i)==s) ls.erase(i); } cout<<"Lo studente nn è presente nella lista" << endl; } e questa la lista degli errori: 1 C:\Dev-Cpp\studente.cpp In file included from studente.cpp 7 C:\Dev-Cpp\studente.h syntax error before `,' . . . .... .. Ultima modifica di topspin : 22-04-2005 alle 16:39. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
E visto che mi ci trovo Vi riporto anche il testo dell'esercizio x eventuali incongruenze.
Si vogliono memorizzare, per ogni studente di un istituto,i voti riportati su 10 materie. Definire la struttura dati che si ritiene più adatta a memorizzare i dati richiesti, assumendo che uno studente può essere identificato da un numero di matricola e che i voti sono interi nell'intervallo 0-10. Realizzare una procedura che, ricevendo in ingresso una struttura dati contenente i voti riportati da ogni studente,restituisca il numero di matricola e la media dei voti dello studente che ha riportato la media + alta. Grazie per l'aiuto......a presto.
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Quote:
EDIT 3: nel file studente.h hai fatto #include "materia.h"? Ultima modifica di kk3z : 22-04-2005 alle 16:26. |
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
si, ma da lo stesso errore.
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
Un altra cosa: ma gli header come string.h map.h list.h, sono presenti in tutti i compilatori???
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
si ma string.h è per l'array di carattere del c, se vuoi usare std::string devi includere <string>, per usare list devi includere <list>, per includere map devi usare <map>
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
ok,per il problema precedente???
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Qui si tratta di un riferimento incrociato...
La classe studente usa la classe materia...la classe materia usa la classe studente... Non include materia.h in studenti.h e scrivi prima della classe studenti una dichiarazione parziale della classe materia: class Materia { }; |
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
Grazie...problema risolto, ma come puntualmente accade nei novelli si è presentato un altro problema,relativo ad un altro esercizio.
Allora, ho dichiarato una map<Studente,string> mv; in cui sono riportati come chiave un oggetto di tipo Studente a cui corrisponde un valore mappato che è una stringa ammesso\nnammeso. Quando vado a definire una funzione che inserisca un nuovo oggetto Studente nella map mi dice che devo dichiarare operator[]().Ho visto come dichiarare questo operator (ma una descizione precisa nn c'è o meglio nn ò'ho trovata). Quindi la domanda è: come definire questo operator[] per manipolare la map???? La funzione che ho dichiarato è: void Provincia::insert_Studente(Studente s,string a) { map<Studnte,string>::iterator i; i=mv.find(s); if(i!=mv.end()) cout << "Studente già presente." << endl; else mv[s]=a;} //L'operator[]() serve per regolare questo assegnamento??? Praticamente la classe Provincia ha una map nella quale la chiave è un oggetto Studente.... Per il riferimento ho fatto una dichiarazione parziale. In attesa di una Vostra risposta Vi lascio i miei saluti....a presto Ultima modifica di topspin : 23-04-2005 alle 21:13. |
|
|
|
|
|
#13 |
|
Junior Member
Iscritto dal: Sep 2004
Messaggi: 26
|
Cmq ho provato a passare una semplice stringa come chiave...e funziona,quindi il problema si presenta quando vado a passare l'oggetto studente. Come si effettua questo passaggio????
Grazie a presto |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:41.



















