ifstream myfile("corsa.txt");
int anno;
string a;
string nome;
float tempo;
string t;
string luogo;
if (myfile.is_open()) {
while (getline(myfile, a , ':')) {
istringstream token(a);
token >> anno;
getline(myfile, t , ':');
istringstream token2( t );
token2 >> tempo ;
getline(myfile, nome, ':');
getline(myfile, luogo );
Item it(anno, tempo , nome, luogo);
L1.insert(it);
}
}
else {
cout << "errore di apertura del file " << endl;
return -1;
}
myfile.close();
ho un file , atleti.txt che è fatto cosi:
1972:10.07:Valeriy Borzov:Munich
si presenta nel formato anno (int ) , tempo (float) , nome (string) , luogo (string). non riesco a capire dove sbaglio al momento di aprire il file e estrapolare i dati da esso.. mi compare l'errore " 'Item::Item(int,std::string,float,std::string)': impossibile convertire l'argomento 2 da 'float' a 'std::string' " ma apro i file nello stesso modo delle ultime prove e non ho mai avuto problemi... l'unica differenza stavolta è che il tempo è in formato float. io ho estratto il dato dal primo : al secondo : e poi l'ho inserito in t (string) per poi convertirlo in tempo (float). quindi nel file .h , per definire l'item ho scritto :
class Item {
private:
int anno;
string nome;
float tempo;
string luogo;
public:
Item(int a = 0 , string n = "", float t = 0.0, string l = "") { anno = a; nome = n; tempo = t; luogo = l; }
int null() {
return anno == maxKey; // più avanti è richiesto un albero con questo campo come chiave
}
int key() const { return anno; }
string getnome() const { return nome; }
int getanno() const { return anno; }
float gettempo() const { return tempo; }
string getluogo() const { return luogo; }
void setnome(string n) { nome = n; }
void settempo(float t) { tempo = t; }
void setvelocità(string l) { luogo = l; }
forse per i float mi sono persa qualcosa dalla teoria e devo estrarre i numeri prima della virgola e quelli dopo separatamente ?