[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