Ver Mensaje Individual
  #6  
Antiguo 02-08-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Si me permitís, NEG1414 fíjate en este fragmento de tu código:

Código:
TDatos::TArchivo *TDatos::LeoDatos()
{

   TArchivo A;


   for(int i=0;i<100;i++)
    {
       A.ListaRegistros[12].Primero      = true;
       A.ListaRegistros[12].Segundo      = false;
       A.ListaRegistros[12].Num          = 0;
    }

   return &A;

}
Creas una variable local, la modificas y devuelves un puntero a la misma. Al salir de la función esa variable deja de existir, luego el puntero devuelto apunta a un valor inválido.

Creo que lo que pretendes es que la variable A sea de la clase y no de la función, en cuyo caso declarala como miembro de la clase TDatos. En oreo caso incorporalá como parámetro de la función LeoDatos().

Con estos cambios que te pongo debajo, funciona como creo que quieres:

Código:
class TDatos
{
  private:


    struct ERegistro
     {
        bool Primero;
        bool Segundo;
        unsigned short  Num;
     };

    typedef ERegistro TRegistro;

    struct SArchivo
     {
        char Nom[16];
        TRegistro ListaRegistros[100];
     } Archivo;                                 // DECLARO VARIABLE Archivo

    typedef SArchivo TArchivo;


  public:

    typedef SArchivo TArch;

    //Constructores
    TDatos();

    TArchivo *LeoDatos();

};
Código:
TDatos::TArchivo *TDatos::LeoDatos()
{
   for(int i=0;i<100;i++)
    {
       Archivo.ListaRegistros[12].Primero      = true;
       Archivo.ListaRegistros[12].Segundo      = false;
       Archivo.ListaRegistros[12].Num          = 0;
    }

   return &Archivo;
}
Permíteme un consejo, clarifica un poco la estructura de tu código y no abuses de typedef



Saludos.
Responder Con Cita