[C con Clase] Ficheros en C++

Paco Quintana FQUINTA en telefonica.net
Vie Nov 30 18:04:02 CET 2007


Programante escribió:

>Paco Quintana escribió:
>  
>
>>Es verdad como se me puede ocurrir no mandar el código y los 
>>resultados del compilador
>>en que estaré pensando.....
>>Bien, en los ficheros adjuntos teneis el proyecto con los cinco 
>>archivos de códogo y otro con los reultados del compilador
>>En los de códogo van las dos clases (Registro y Datos) con sus 
>>respectivas implementaciones y en el fichero FicheroPrueba.cpp el main.
>>espero vuesttas contestaciones, estoy deseando aprender
>>Gracias...
>>    
>>
>Pues calro que te da un montón de errores. ¡No has añadido ni un include!
>Omitir añadir una cabecera da errores largos como estos. La buena 
>noticia es que es sencillo de arreglar.
>
>En Datos.h
>-Usas fstream, pero no está declarado. Solución: Añadir #include <fstream>
>-Usas cin y cout pero no están declarados. Solución: Añadir #include 
><iostream>
>Añadimos además using namespace std; para tener acceso directo a ello.
>Finalmente, la clase Datos trabaja con Registro, pero no lo conoce. 
>Solución: O bien pones en Datos.cpp #include "Registro.h"
> antes de #include "Datos.h" (con el inconveniente que tienes que 
>acordarte de ponerlos siempre en ese orden), o pones #include 
>"Registro.h" en Datos.h o bien le pones "class Registro;" aprovechando 
>que no usas ese dato, sino sólo referencias.
>
>
>Similarmente, en Registro.h
>-Usas strcpy() sin que esté declarada. Solución: Añadir #include 
><cstring> y using namespace std;
>
>
>Similarmente, en Registro.cpp
>-Usas system() sin que esté declarada. Solución: Añadir #include <cstdlib>
>-También cin y cout: #include <iostream>
>-Usas setw: #include <iomanip>
>-Usas LeeNumero() sin declararlo: Añadimos el prototipo al principio: 
>long LeeNumero();
>
>
>Et voilà. Ya compila.
>
>Ahora unas consideraciones:
>Defines el código de los constructores y destructores en el archivo de 
>cabecera. Los constructores y destructores no son más que otras 
>funciones. Deberían ir en el .cpp correspondiente (y no harían falta 
>tantos includes en los .h).
>Al heredar Datos de manera publica de fstream, el usuario puede llamar a 
>funciones internas, como Datos.close()  dejando la clase en un estado 
>inválido. Aunque esto lo evitas heredándolo como privado, la forma 
>adecauda es usar composición, no herencia.
>Puesto que los registros dependen de LeeNumero(), ésta no debería estar 
>declarada en FicheroPrueba.
>Los registros interaccionan directamente con la pantalla y el usuario.
>
>
>
>
>_______________________________________________
>Lista de correo Cconclase Cconclase en listas.conclase.net
>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>  
>
Fenómeno, así es, ya compila, MARAVILLOSO
Gracias programante y David Reza
ahora si que me he enterado.
Igualmente podriamos dar a la clase Datos un miembro  char fichero[15] 
con un par de funciones miembro set y get para establecer el nombre del 
fichero a crear o añadir datos y así mismo implementarlo en el 
constructor de la clase datos y así se podria crear una instancia de 
esta clase a la que se le suminstra en le constructor el nombre del 
fichero...
Cierto ???





Más información sobre la lista de distribución Cconclase