Gracias tio, ya funciona. Ahora estoy mirando lo que me dijiste en el otro post de los castings y los templates, bueno, que lo pondre alli por no hacer mas offtopic.<br><br>Muchas gracias por tu ayuda.<br><br><div class="gmail_quote">
2009/3/10 Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hola Vicente,<div><div></div><div class="h5"><br>
<br>
vicente lozano wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hola,<br>
<br>
haciendo un ejercicio de cadenas me encuentro con lo siguiente:<br>
<br>
/// Cadena.h<br>
#include <iostream><br>
#include <cstream>/<br>
...<br>
*class */Cadena/ *{*<br>
 *private:*<br>
_*10-> *_ *char* */pstr/;<br>
 *public:*<br>
  ...<br>
*_25->_  friend* *ostream & **operator*<< *(ostream&, const Cadena&);*<br>
 ....<br>
*}*<br>
<br>
///Cadena.cpp<br>
_*5->*_ #include "Cadena.h"/<br>
*using namespace *std;<br>
...<br>
*ostream & operator*<< *(ostream&* os*, const Cadena&* cad*)*<br>
*{*<br>
_*71->*_ os << cad.pstr;<br>
 *return* os*;*<br>
*}*<br>
....<br>
<br>
Y cuando intento compilar en dev-C++ 4.9.9.2 me da los errores:<br>
in file included from Cadena.cpp<br>
25 ISO C++ forbids declaration od 'ostream' with no type<br>
25 'ostream' is neither function nor member function; cannot be<br>
declared friend<br>
25 expecter ; before & token<br>
In function 'std::ostream& operator<<(std::ostream&,constCadena&)<br>
10char* Cadena::pstr is private<br>
71 within this context<br>
<br>
El tema es que si en lugar de acceso directo al elemento y friend lo pongo sin ser friend y con un getter (esto lo he probado con enteros) entonces funciona.<br>
Me gustaria comprender porque no me deja hacer esto, porque yo pienso que me tendria que permitir hacerlo, no veo que puede estar mal.<br>
<br>
</blockquote>
<br></div></div>
El mensaje del error se basa en que el compilador desconoce que 'ostream' sea un tipo de dato, pensando que estamos declarando la variable 'ostream'. Esto es porque seguramente se te ha olvidado indicar el espacio con nombre 'std'. Puedes reescribir la línea #25 de esta manera:<br>

<br>
friend std::ostream & operator<< ( std::ostream&, const Cadena& );<br>
<br>
También puedes escribir la directiva de compilador 'using' después de incluir los ficheros de cabecera. Esto sería,<br>
<br>
#include <iostream><br>
<br>
using namespace std;<br>
...<br>
<br>
En "Cadena.cpp", no existe el mismo error acerca de 'ostream', porque indicaste que vas a usar el espacio con nombre 'std'.<br>
<br>
Los demás errores se basan en el primer problema y desaparecerán cuando agregues 'std' en "Cadena.h".<br>
<br>
<br>
Espero que esto te ayude.<br>
<br>
Steven<br>
<br>
<br>
_______________________________________________<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>