PDA

View Full Version : Errore di compilazione con dev c++


topspin
22-04-2005, 03:02
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:

cionci
22-04-2005, 06:58
Che errore ?

topspin
22-04-2005, 11:14
Il messaggio che mi appare è "In file included from studente.cpp"

Ciao

topspin
22-04-2005, 13:05
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 `,'
.
.
.
....
..

topspin
22-04-2005, 13:12
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:

kk3z
22-04-2005, 15:22
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"?

topspin
22-04-2005, 15:35
si, ma da lo stesso errore.

topspin
22-04-2005, 15:41
Un altra cosa: ma gli header come string.h map.h list.h, sono presenti in tutti i compilatori???

kk3z
22-04-2005, 18:08
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>

:)

topspin
22-04-2005, 19:50
ok,per il problema precedente??? :cry: :cry: :cry:

cionci
23-04-2005, 01:15
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
{
};

topspin
23-04-2005, 19:29
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:

topspin
24-04-2005, 12:53
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: