ok ragazzi grazie ai vostri aiuti sono riuscito a far funzionare questo semplice programmino di test. Ho modificato la classe in modo che lavorasse direttamente con le stringhe, ed ho fatto un'overloading dell'operatore =.
Metto qui il codice finale e funzionante nel caso dovesse servire a qualcuno in futuro.
FILE: amico.h
codice:
class amico {
public:
amico(const std::string&, const std::string&);
amico& operator=(amico&);
void print();
virtual ~amico();
private:
std::string nome; std::string cognome; };
FILE amico.cpp
codice:
#include<iostream> #include<string> #include<cassert> using namespace std; #include "amico.h"
amico::amico( const std::string& first, const std::string& second)
{ nome=first; cognome=second;}
amico& amico::operator=(amico& tizio) {
nome=tizio.nome;
cognome=tizio.cognome;
return *this;}
void amico::print() { cout << nome << " " << cognome; }
amico::~amico() { nome.clear(); cognome.clear(); }
FILE main.cpp
codice:
#include <map> #include <algorithm> #include <iostream> #include <string> using namespace std; #include "amico.h"
int main(){
amico amic ("marco","rossi"); //definisco l'oggetto amic di tipo amico
amico amic2("cane","pane");
// amico temp("","");
map<int,amico> amap; //creo la mappa amap
amap.insert(std::pair<int, amico>(1, amic));
amap.insert(std::pair<int, amico>(2, amic2));
cout << "Size: " << amap.size() << endl;
cout << "\n______________________________________________\n";
cout << amap.find(1)->first << " "; //stampa il first, ovvero l'intero
//temp= amap.find(1)->second; temp.print(); //stampa il second, ovvero l'amico
amap.find(1)->second.print(); //(amap.find(2)->second) è un oggetto di tipo amico
cout << "\n______________________________________________\n";
map<int,amico>::iterator it;
for(it=amap.begin(); it!=amap.end(); it++)
{cout <<"map : " << it->first << " "; it->second.print(); cout << endl;}
amic2.print(); cout << endl;
amic2=amic; //test operatore =
amic2.print(); cout << endl;
amic.~amico(); //test decostruttore
amic.print(); cout <<"<- dovrebbe essere uno spazio vuoto" << endl;
system("pause");
return 0; }
Che ne dite, così va bene o nonostante funzioni ci sono ancora errori concettuali?