[C con Clase] Problema de escritura y lectura multiple

Davidson, Steven srd4121 en njit.edu
Mie Jul 8 17:13:41 CEST 2015


Hola Alberto,

El problema es que intentas guardar todos los caracteres directamente en el
objeto, 's', que es de tipo 'string'. Como desconoces por completo la
representación interna de la clase 'string', no sabes dónde estás guardando
los datos ni tampoco si has construido un objeto de tipo 'string'
correctamente. Por esta razón se debe usar el constructor de una clase,
porque "nosotros" no sabemos nada de su gestión interna.

La solución es guardar una cadena de caracteres como un array (dinámico) de
'char' y luego construir el objeto 'string' a partir de tal array. Por
ejemplo,

// Nombre
char *pCadena = new char[nLength];
fentrada.read( pCadena, nLength );
v2[i].SetNombre( string(pCadena) );
delete[] pCadena;

// Apellido 1
pCadena = new char[nLength];
fentrada.read( pCadena, nLength );
v2[i].Apellido1( string(pCadena) );
delete[] pCadena;

// Apellido 2
pCadena = new char[nLength];
fentrada.read( pCadena, nLength );
v2[i].Apellido2( string(pCadena) );
delete[] pCadena;

Como puedes ver, no necesitas el objeto 's', ya que podemos instanciar un
objeto temporal de tipo 'string' y pasarlo directamente a cada función
miembro.


Espero que esto aclare la duda.

Steven


2015-07-08 5:09 GMT-04:00 Alberto <tuit.alberto.sinc en gmail.com>:

> Muchas gracias Steven Davidson por tu aporte.
>
> Ahora, me tope con problemas a la hora de la lectura, por ahora tengo esto:
>
> string::size_type nLength;
> int edad;
> string s;
>
> fentrada.read( reinterpret_cast< char *>( &nLength ), sizeof nLength );
> fentrada.read( reinterpret_cast< char *>(&s), nLength );
> v2[i].SetNombre(s);
> fentrada.read( reinterpret_cast< char *>( &nLength ), sizeof nLength );
> fentrada.read( reinterpret_cast< char *>(&s), nLength );
> v2[i].SetApellido1(s);
> fentrada.read( reinterpret_cast< char *>( &nLength ), sizeof nLength );
> fentrada.read( reinterpret_cast< char *>(&s), nLength );
> v2[i].SetApellido2(s);
> fentrada.read( reinterpret_cast< char *>( &edad ), sizeof edad );
> v2[i].SetEdad(edad);
>
>
> Aunque supongo que tendre que mirarlo un poco mas
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150708/1363bfe8/attachment.html>


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