[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