FAQ

=Preguntas frecuentes=


 * Practica 7: En la clase employee.h, trato de crear el operador << como una función en linea implicita y me da error de compilación.
 * Práctica 8 (ejercicio 3.1), Cuando voy leyendo el fichero, el último elemento siempre me lo lee dos veces.



Practica 7: En la clase employee.h, trato de crear el operador << como una función en linea implicita y me da error de compilación
Hacer algo como code format="cpp" class My { public: . . . inline friend ostream & operator<<(ostream &str,const MyC &C); } . ..

ostream & MyC::operator<<(ostream &str,const MyC &C){

}

code es algo que el compilador no os dejará hacer. Tendréis que hacer el código en línea explícito. code format="cpp" class My { public: . . . friend ostream & operator<<(ostream &str,const MyC &C){ ...... } } code La razón lo cierto es que no os la puedo decir(por que no la se). Si alguien la encuentra que me lo diga.



Práctica 8 (ejercicio 3.1), Cuando voy leyendo el fichero, el último elemento siempre me lo lee dos veces
Cuando uno lee con ficheros, hay que tener mucho cuidado de cuando se llega al final. Fijese en el siguiente ejemplo. Supongamos que queremos leer el siguiente fichero (file.dat) 10 20 2

Si usamos el siguiente codigo: code format="cpp" using namespace std; main { ifstream file("file.dat"); float num; int i=0; while(!file.eof) {  file>>num; cout<<Numero leido: "<<num<<endl;  i++;   }  cout<<"Se han leido desde fichero "<<i<<" numeros"<<endl; }
 * 1) include
 * 2) include

code El resultado es code Numero leido 10 Numero leido 20 Numero leido 2 Numero leido 2 Se han leido dede fichero 4 numeros code

¿Porqué ocurre esto? Bueno, el tema es que para que el objeto file detecte el fin de fichero, tiene que tratar de leer un elemento y no poder porque ha llegado al final. Es decir, cuando //file.eof// es true, quiere decir que se ha tratado de leer un dato y no se ha podido. Y si //file// no puede leer nada, pues no modifica la variable //num// y por tanto tiene el valor anterior.

¿Cómo se puede solucionar el problema? code format="cpp" using namespace std; main { ifstream file("file.dat"); float num; int i=0; while(!file.eof) {  file>>num; if (!file.eof){ cout<<Numero leido: "<<num<<endl;     i++;   }   else cout<<"Se ha llegado al final del fichero"<<endl;   }
 * 1) include
 * 2) include

cout<<"Se han leido desde fichero "<<i<<" numeros"<<endl; } code Pues nos aseguramos tras la lectura de que no se ha generado el //eof//.


 * Conclusión:** eof es true no cuando se llega al fin del fichero, sino cuando se lee el final del fichero.