View Full Version : 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 :help: :doh: :mc: :muro:
Il messaggio che mi appare è "In file included from studente.cpp"
Ciao
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 `,'
.
.
.
....
..
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. :read: :read: :read: :read: :read: :read: :read: :read:
Il messaggio che mi appare è "In file included from studente.cpp"
Ciao
EDIT non avevo letto tutto, ora controllo :)
EDIT 3: nel file studente.h hai fatto #include "materia.h"?
si, ma da lo stesso errore.
Un altra cosa: ma gli header come string.h map.h list.h, sono presenti in tutti i compilatori???
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>
:)
ok,per il problema precedente??? :cry: :cry: :cry:
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
{
};
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 :muro:
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 :rolleyes:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.