Allora ho scritto questo programma, non mi da nessun errore, ma non mi da nessun risultato nel file di testo di output, qualcuno riesce a capire quale sia il problema?
file.h:
#include <string>
#include <list>
using namespace std;
const int MAX_DIM=100;
class Studente{
private:
string nome;
string cognome;
string matricola;
list<int> esami;
public:
Studente();
Studente (const Studente& s);
bool operator==(const Studente &s)const;
friend ostream& operator<<(ostream &os, const Studente &s);
friend istream& operator>>(istream &is, Studente &s);
// Funzioni SET
void setNome(const string n){nome=n;}
void setCognome(const string c){cognome=c;}
void setMatricola(const string m){matricola=m;}
// Funzioni GET
string getNome()const {return nome;}
string getCognome()const {return cognome;}
string getMatricola()const {return matricola;}
int getNesami(){return esami.size();}
// Altre Funzioni
void addEsame(int v); // aggiunge un nuovo esame (voto) alla lista degli esami
void clear(); // Svuota la lista dei redditi
};
file.cpp:
Studente::Studente(){
nome="";
cognome="";
matricola="";
list<int> esami (MAX_DIM);
}
Studente::Studente (const Studente& s){
nome=s.getNome();
cognome=s.getCognome();
matricola=s.getMatricola();
esami=s.esami;
}
bool Studente::operator==(const Studente &s)const{
if (matricola==s.matricola)
return true;
else return false;
}
ostream& operator<<(ostream &os, const Studente &s){
os<<s.nome<<",";
os<<s.cognome<<",";
os<<s.matricola<<",";
os<<s.esami.size()<<" ";
list<int>::const_iterator it;
for(it=s.esami.begin(); it!=s.esami.end(); ++it){
os<<" "<<*it;
}
os<<endl;
return os;
}
istream& operator>>(istream &is, Studente &s){
int tmp,n;
getline(is,s.nome,',');
getline(is,s.cognome,',');
getline(is,s.matricola,',');
is>>n;
s.esami.clear();
for(int i=0; i<n; i++){
is>>tmp;
s.esami.push_back(tmp);
}
is.ignore();
return is;
}
void Studente::addEsame(int v){
esami.push_back(v);
}
void Studente::clear(){
esami.clear();
}
main.cpp:
#include <iostream>
using namespace std;
#include "studente.h"
#include <fstream>
#include <map>
#include <cstring>
#include <string>
#include <cstdlib>
ostream & operator<<(ostream &os, const map<string, Studente> &l);
istream & operator>>(istream &is, map<string, Studente> &l);
map<string, Studente> copia(map<string, Studente> const &m1, map<string, Studente> const &m2);
// INPUT: due map m1 ed m2
// OUTPUT: restituisce una nuova map contenente tutti gli elementi di m1 ed m2
int main(){
map<string,Studente> m1,m2,m3;
ofstream o_stream;
ifstream i_stream;
i_stream.open("input1.txt");
if(i_stream)
i_stream>>m1;
else
cerr<<endl<<"ERRORE! IMPOSSIBILE APRIRE FILE input1.txt"<<endl;
exit(EXIT_FAILURE);
i_stream.close();
i_stream.open("input2.txt");
if(i_stream)
i_stream>>m2;
else
cerr<<endl<<"ERRORE! IMPOSSIBILE APRIRE FILE input2.txt"<<endl;
exit(EXIT_FAILURE);
i_stream.close();
cout<<"ciao"<<endl;
m3=copia(m1,m2);
o_stream.open("output.txt");
if(o_stream)
o_stream<<m3;
else
cerr<<endl<<"ERRORE! IMPOSSIBILE APRIRE FILE output.txt"<<endl;
exit(EXIT_FAILURE);
o_stream.close();
return 0;
}
ostream & operator<<(ostream &os, const map<string, Studente> &l){
map <string,Studente>::const_iterator it;
for(it=l.begin(); it!=l.end(); ++it){
os<<it->second;
}
return os;
}
istream & operator>>(istream &is, map<string, Studente> &l){
Studente tmp;
string t;
typedef map <string,Studente>::value_type val;
while(is>>tmp){
t=tmp.getMatricola();
l.insert(val(t,tmp));
tmp.clear();
}
return is;
}
map<string, Studente> copia(map<string, Studente> const &m1, map<string, Studente> const &m2){
map<string,Studente> tmp;
typedef map <string,Studente>::value_type val;
map <string,Studente>::const_iterator it,iter;
for(it=m1.begin(); it!= m1.end(); ++it){
tmp.insert(val(it->first,it->second));
}
for(iter=m2.begin(); iter!= m2.end(); ++iter){
tmp.insert(val(iter->first,iter->second));
}
return tmp;
}