Quiero añadir aquí una pequeña acotación.<div><br></div><div>SIEMPRE cuando se vaya a colocar una cadena de caracteres como parámetro de una función, y la misma no va a ser modificada, usen el const. Esto por motivos de seguridad. Aunque también (y personalmente lo recomiendo) se podría usar la clase std::string para cadenas de carácteres. Las ventajas son enormes<br>

<br><div class="gmail_quote">El 21 de noviembre de 2011 07:22, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu">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;">

Hola Miguel Ángel,<br>
<br>
2011/11/21 Miguel Angel Torres Fernandez-piñar <<a href="mailto:miguelangeltorresfp@gmail.com">miguelangeltorresfp@gmail.com</a>>:<br>
<div class="im">> Hola amigos del C++.....<br>
><br>
> Esta duda es demasiado básica, pero le he dado muchas vueltas y no sé qué<br>
> por qué no funciona :<br>
><br>
<br>
</div>Vamos a ver.<br>
<div class="im"><br>
><br>
> class Persona {<br>
>    public:<br>
>      Persona(char *n) { strcpy(nombre, n); }<br>
<br>
</div>No aconsejo usar este prototipo. Como el constructor no tiene<br>
intención de modificar el contenido de la cadena apuntada por 'n',<br>
deberías indicarla escribiendo 'const'. Esto es,<br>
<br>
Persona( const char *n )  { strcpy(nombre, n); }<br>
<br>
Adicionalmente, esto nos permitirá enviar cadenas literales que por<br>
definición son constantes, como has hecho más abajo en tus pruebas.<br>
<div class="im"><br>
>      const char *LeeNombre() const { return nombre; }<br>
>    protected:<br>
>      char nombre[30];<br>
> };<br>
><br>
><br>
> int main() {<br>
><br>
>           Persona( "Pepe" );           // Genial !!!.......no hay problema.<br>
<br>
</div>La verdad es que tal y como defines el constructor, esto sí sería un<br>
problema, porque estarías pasando un 'const char *' a un parámetro de<br>
tipo 'char *'. No puedes eliminar 'const' tan fácilmente, y en<br>
particular, no en este caso ya que la cadena es originalmente<br>
constante.<br>
<div class="im"><br>
> }<br>
><br>
> Pero si hago..........<br>
><br>
> int main() {<br>
><br>
>           char nombre[10] = "Pepe";<br>
>           Persona( nombre );           // Entonces me da error y no entiendo por qué...........<br>
<br>
</div>No me da ningún y personalmente, no veo por qué debería hacerlo.<br>
Instancias un objeto temporal, que obviamente se destruye al finalizar<br>
la sentencia.<br>
<div class="im"><br>
> }<br>
><br>
><br>
> Seguro que es una tontería por eso, por falta de base, pero ahora mismo no<br>
> caigo qué puede ser......<br>
><br>
<br>
</div>Si te da un error, sería mejor que compartieras el mensaje que te da y<br>
"quién" te lo da: el compilador, el enlazador, o el sistema operativo.<br>
<br>
<br>
Después de probar tus ejemplos, los cambié para ver si de verdad<br>
funcionaban correctamente e hice esto:<br>
<br>
int main()<br>
{<br>
  cout << Persona( "Pepe" ).LeeNombre() << endl;<br>
<br>
  return 0;<br>
}<br>
<br>
<br>
Y la otra versión:<br>
<div class="im"><br>
int main()<br>
{<br>
  char nombre[10] = "Pepe";<br>
</div>  cout << Persona( nombre ).LeeNombre() << endl;<br>
<br>
  return 0;<br>
}<br>
<br>
Ambas versiones compilaron y funcionaron correctamente al ser ejecutadas.<br>
<br>
<br>
Espero que esto te oriente un poco.<br>
<font color="#888888"><br>
Steven<br>
</font><div><div></div><div class="h5"><br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">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>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Asdrúbal Iván Suárez Rivera<br></div><br><i>El éxito de alguien que enseña no es que sepa mucho, sino que lo poco que sabe lo sepa hacer llegar.</i><br>

<br>
</div>