Hola Leonel,<br><br>
<div class="gmail_quote">2010/11/30 Leonel Florin Selles <span dir="ltr"><<a href="mailto:leonel06033@cfg.jovenclub.cu" target="_blank">leonel06033@cfg.jovenclub.cu</a>></span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">Hola amigos:<br><br>como puedo utilizar un namespace creado por mi en una clase que no<br>pertenece al namespace.</blockquote>

<div> </div>
<div>[CORTE]</div>
<div> </div>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">Yo también tengo incluido MyNameSpace dentro del main(), porque aqui<br>tambien necesito utilizar estos obejtos, y por esta razon es que obtengo<br>
el error<br><br>multiple definition of ObjetoClase1<br>multiple definition of ObjetoClase2<br><br>como puedo utilizar el namespace en varios lugares sin que suceda este<br>error, por ejemplo cuando utilizo el "using namespace std;" este lo puedo<br>
agregar donde yo quiera que nunca me da esots problemas, que estoy<br>haciendo mal, algun consejo, trabajo sobre KDEVELOP.</blockquote>
<div> </div>
<div>Realmente tienes tres problemas: dos errores y un problema del espacio denominado.</div>
<div> </div>
<div>Un error es lógico, acerca de las directivas del precompilador. Escribes:<br><br>
<div>#ifdef MYNAMESPACE_H<br>#define MYNAMESPACE_H</div></div>
<div>...</div>
<div> </div>
<div>Cuando debería ser:<br><br>
<div>#ifndef MYNAMESPACE_H<br>#define MYNAMESPACE_H</div>
<div>...</div>
<div> </div>
<div>Quieres comprobar el caso de que 'MYNAMESPACE_H' no exista, para poder definirla.</div></div>
<div> </div>
<div>El otro error de enlazado está en que defines dos objetos del mismo nombre en el mismo espacio denominado y en el mismo ámbito. Esto contradice "la regla de una sola definición" en C/C++. La solución es definir los objetos una sola vez y luego redeclaralos donde los necesites. En tu caso, esto sería,</div>

<div> </div>
<div>// "MyNamaSpace.h"</div>
<div> </div>
<div>#ifndef MYNAMESPACE_H<br>#define MYNAMESPACE_H</div>
<div> </div>
<div>#include "clase1.h"</div>
<div>#include "clase2.h"</div>
<div> </div>
<div>namespace MyNamaSpace</div>
<div>{</div>
<div>// Declaraciones<br>extern clase1 ObjetoClase1;<br>extern clase2 ObjetoClase2;<br>}</div>
<div> </div>
<div>#endif</div>
<div> </div>
<div>Y luego definimos estos objetos en otro fichero fuente, que puede ser por ejemplo "MyNamaSpace.cpp", como mencionó Rubén; por ejemplo,</div>
<div> </div>
<div>// "MyNamaSpace.cpp"</div>
<div> </div>
<div>#include "MyNamaSpace.h"</div>
<div> </div>
<div>
<div>namespace MyNamaSpace</div>
<div>{</div>
<div>// Definiciones<br>clase1 ObjetoClase1;<br>clase2 ObjetoClase2;<br>}</div></div>
<div> </div>
<div> </div>
<div>En cuanto al otro problema, acerca del espacio denominado, simplemente engloba los contenidos de ambos ficheros de cabecera que incluyes en  "MyNamaSpace.h"; esto es,</div>
<div> </div>
<div>
<div>// "MyNamaSpace.h"</div>
<div> </div>
<div>#ifndef MYNAMESPACE_H<br>#define MYNAMESPACE_H</div>
<div> </div>
<div>
<div>namespace MyNamaSpace</div>
<div>{</div>#include "clase1.h"</div>
<div>#include "clase2.h"</div>
<div> </div>
<div>// Declaraciones<br>extern clase1 ObjetoClase1;<br>extern clase2 ObjetoClase2;<br>}</div>
<div> </div>
<div>#endif</div></div>
<div> </div>
<div>Ahora las clases serán definidas en el espacio 'MyNamaSpace', pero solamente desde dentro del fichero de cabecera "MyNamaSpace.h". Si #incluyes los otros dos ficheros de cabecera directamente en otro ficheros, entonces esas definiciones serán globales.</div>

<div> </div>
<div> </div>
<div>Espero que todo esto aclare las dudas.</div>
<div> </div>
<div>Steven</div>
<div> </div></div>