<div dir="ltr"><div><div>jo.........tercera disculpa en un segundo.<br><br></div>Funciona perfectamente !!!!. <br><br></div><div>Era un error mío.<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 27 de diciembre de 2013, 21:47, Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Disculpar otra vez que se envió sin darme cuenta.<br><br></div>El problema que tengo es que en la clase Estado cuando hago :<br>
<br></div>gestor->cambiar_estado( "otro_estado" );<br>
<br></div>Me dice que no se permite un puntero a un tipo de clase incompleta.<br><br></div>Y si comento esa sentencia todo compila perfectamente.<br><br></div>Gracias de antemano.<br><br></div>PD - sería mejor pasar una referencia a la clase Gestor en vez de un puntero ???<br>

<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 27 de diciembre de 2013, 21:44, Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>></span> escribió:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>uf, disculpar que moleste de nuevo, es que no sé cómo hacer esto.<br><br></div>Paso una referencia del Gestor a una clase Estado dentro de la misma clase Gestor de esta forma : ( estoy usando una librería que tiene implementado Shared_Ptr ).<br>


<br>Shared_Ptr< Estado > estado;<br></div>estado.reset( new Estado( this ) );<br><div><br></div><div>En la clase Estado tengo :<br><br></div><div>class Estado<br>{<br></div><div>       Gestor * gestor;<br>         <br>


</div><div>         Estado ( Gestor * _gestor )<br>         {<br></div><div>                 gestor = _gestor;<br></div><div>         }<br><br></div><div>}<br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">


El 27 de diciembre de 2013, 18:22, Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>></span> escribió:<div><div>
<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div><div><div><div><div>uf, Steven, muchísimas gracias por estos ejemplos y aclaraciones.<br><br></div>El primer ejemplo me viene como anillo al dedo.<br><br></div>El segundo no lo entiendo del todo. Realmente sé más o menos lo que es el polimorfismo, pero aun no he conseguido llegar al paso en el que integre eso en mis programas. Poco a poco.<br>



<br></div>Pero es GENIAL !!!! tener a profesores que te puedan ir resolviendo dudas conforme te vas encontrando con los problemas.<br><br></div>Algún día espero poder entrar en un sitio a trabajar y tener alguien como tú de referencia.<br>



<br></div>Un super saludo a tí y a todos los demás de la lista !!!.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 27 de diciembre de 2013, 17:52, Davidson, Steven <span dir="ltr"><<a href="mailto:srd4121@njit.edu" target="_blank">srd4121@njit.edu</a>></span> escribió:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr">Hola Miguel Ángel,<div class="gmail_extra"><br><div class="gmail_quote">2013/12/27 Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>></span><br>




<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div><div>Hola a todos, <br></div></div>




</div></div></blockquote><div><br></div><div>[CORTE]</div><div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<div dir="ltr"><div><div><div>He pensado en que por ejemplo podría tener un método en "Gestor_Principal" que fuera "change_state". Le podría pasar una referencia de este método a cada clase en el momento de crearla.<br>




</div></div><div><br></div></div></div></blockquote><div><br></div></div><div>No aconsejo usar punteros a funciones miembro (métodos), porque creas una relación demasiada estrecha entre las clases. Si optas por usar polimorfismo, no podrías hacerlo por el puntero a la función miembro de una clase específica, cuando te interesaría elegir otras funciones miembro de otras clases en la jerarquía.</div>




<div><br></div><div>Lo que sí puedes hacer es "registrar" el objeto del gestor dentro de cada objeto del estado. De esta manera, puedes invocar 'change_state()' del gestor; por ejemplo,</div><div><br></div>




<div>class GestorEstados<br>{<br></div><div>  ...</div><div><div>  void CambiarEstado( Estado *pNuevo );</div>};</div><div><br></div><div>class Estado<br>{<br></div><div>protected:</div><div>  GestorEstados *pge;</div><div>




<br></div><div>public:<br>  Estado( GestorEstados *ptr ) : pge(ptr)  {}</div><div><br></div><div>  void CambiarEstado( Estado *pNuevo )</div><div>  {</div><div>    pge->CambiarEstado( pNuevo );</div><div>  }</div><div>




  ...<br></div><div>};</div><div><br></div><div><div>Aquí tenemos 'CambiarEstado()' en ambas clases, para facilitar su uso. Sin embargo, quizá no sea necesario tener un puntero al gestor como miembro de cada estado y basta con pasar el objeto polimórfico de 'GestorEstados' a cada función miembro de la clase 'Estado'. Por ejemplo,</div>




</div><div><br></div><div>class GestorEstados<br>{<br><div>  void CambiarEstado( Estado *pNuevo );</div><div>  ...</div>};</div><div><br></div><div>class Estado<br>{<br>  ...</div><div>  void CambiarEstado( GestorEstados *pge, Estado *pNuevo )</div>




<div>  {</div><div>    pge->CambiarEstado( pNuevo );</div><div>  }</div><div>};</div><div><br></div><div>Aquí, pasamos el gestor en el momento que se necesite, en lugar de que cada objeto de 'Estado' mantenga un puntero al gestor.</div>




<div><br></div><div><br></div><div>Espero que esto te ayude.</div><span><font color="#888888"><div><br></div><div>Steven</div><div><br></div></font></span></div></div></div>
<br></div></div>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br></div>
</blockquote></div></div></div><br></div>
</blockquote></div></div></div><br></div>
</blockquote></div><br></div>