[C con Clase] DUDA CONTENEDOR
Pedro Rodríguez González
sr.whiteskull en hotmail.com
Mar Jun 23 20:09:40 CEST 2009
Gracias David y gracias a Steve...
FUNCIONA SIN PROBLEMAS!!!
MiContenedor Lista()
{
MiContenedor MC;
...
return MC;
}
...
pero y si quisiera que me devolviera una referencia sin pasarle un argumento
...
MiContenedor& Lista( /* MiContenedor &MC */ )
{
...
return MC;
}
...
...
Queda otra opción, alguna idea? de todas formas escapo con ese arreglo... pero lo ideal sería lo segundo propuesto
> Date: Tue, 23 Jun 2009 13:34:24 -0400
> From: srd4121 en njit.edu
> To: cconclase en listas.conclase.net
> Subject: Re: [C con Clase] DUDA CONTENEDOR
>
> Hola Pedro,
>
> Pedro Rodríguez González wrote:
> > Que tal de nuevo, pues aquí con nuevas dudillas! Resulta que éste
> > ejercicio debe devolver un tipo de contenedor, usando un conjunto
> > asociado tipo map, MiContenedor, todo funciona bien aparentemente,
> > pero el problema es que me da fallo de segmentación al intentar
> > extraer un atributo de una clase contenida, mis sospechas apuntan a
> > éste método, alguien me puede aportar algún detalle para mejorar el
> > susidicho método...
> >
>
> Veamos el código fuente que interesa.
>
> > ...
> > ...
> > MiContenedor& Lista()
> > {
> > MiContenedor MC,*pMC=&MC;
> >
> > ... // inserto clave y datos a MC por medio de "iteratores"
> > ...
> >
> > return *pMC;
>
> Aquí está el problema. Estás retornando la referencia a un objeto local
> a esta función. Recuerda que las variables son eliminadas al terminar el
> ámbito en que fueron creadas. Por consiguiente, tanto 'MC' como 'pMC'
> serán eliminadas al retornar de esta función.
>
> Deberías retornar un objeto nuevo. Por ejemplo,
>
> MiContenedor Lista()
> {
> ...
> return MC;
> }
>
> Con esto, retornamos el objeto 'MC', pero un nuevo objeto es instanciado
> y 'MC' es copiado a tal objeto temporal.
>
> Otra solución es pasar el objeto como parámetro a 'Lista()'. De esta
> manera, el objeto existirá fuera de esta función. Por ejemplo,
>
> MiContenedor& Lista( MiContenedor &MC )
> {
> ...
> return MC;
> }
>
> Así, sí podemos retornar una referencia a un objeto ya instanciado,
> porque tal objeto existe antes y después de ejecutar esta función. Por
> lo tanto, la referencia es correcta.
>
>
> Espero haber aclarado la duda.
>
> Steven
>
>
> _______________________________________________
> 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
_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090623/a4aad306/attachment.html>
Más información sobre la lista de distribución Cconclase