[C con Clase] Problema Usando Ficheros.
Steven R. Davidson
vze266ft en verizon.net
Lun Dic 11 00:14:07 CET 2006
Hola Juan Antonio,
Juan Antonio wrote:
> Hola,
>
> estoy programando un juego en el que también uso ficheros para
> guardar datos. Estoy programando con el API de Windows y con DEV-C++.
> Al comienzo de mi fichero principal añado el include para poder
> manejar archivos:
>
> #include <windows.h>
> //#include <stdio.h>
> #include <fstream>
> #include "Ids.h"
>
> Cuando se produce el mensaje WM_CREATE es cuando quiero abrir el
> archivo y operar con el:
>
> case WM_CREATE:
> ifstream fentrada("Datos.dat", ios::in | ios::binary);
>
> Tal y como está ahora con el include de fstream me lanza al compilar
> que no reconoce ifstream:
>
> ifstream' undeclared (first use this function)
>
> si añado el,
>
> using namespace std;
>
> debajo de los includes obtengo lo siguiente:
>
> crosses initialization of `std::ifstream fentrada'
>
Efectivamente, necesitas indicar el espacio con nombre 'std'. El otro
problema que tienes es que instancias un objeto dentro de un
'switch/case' sin que tal objeto pertenezca a un bloque de ejecución.
Esto es, escribiste lo siguiente:
case WM_CREATE:
ifstream fentrada( "Datos.dat", ios::in | ios::binary );
...
Cuando deberías haber escribito:
case WM_CREATE:
{
ifstream fentrada( "Datos.dat", ios::in | ios::binary );
...
}
Ahora bien, si vas a usar este objeto exclusivamente bajo el mensaje
'WM_CREATE', entonces no hay ningún problema. Sin embargo, si necesitas
acceder a este objeto bajo otros mensajes, entonces deberías instanciar
el objeto localmente a la función. Debido al comportamiento de esta
función, tal objeto se instanciaría repetidamente, por lo que sugiero
declararlo estáticamente. Esto es,
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam )
{
static std::ifstream fentrada( "Datos.dat", ios::in | ios::binary );
switch( msg )
{
...
}
return 0;
}
Espero haber aclarado el asunto.
Steven
Más información sobre la lista de distribución Cconclase