<div dir="ltr">Hola Ernesto,<div class="gmail_extra"><br><div class="gmail_quote">2013/12/5 Ernesto Cajigal <span dir="ltr"><<a href="mailto:ernestoac@icrt.cu" target="_blank">ernestoac@icrt.cu</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 text="#000099" bgcolor="#FFFFFF">
    Hola ante todo,<br>
    Les escribo porque tengo un pequeño proyecto de Estructura de Datos
    1 en C++, estoy programando en Borland C++ Builder 6.0 (nos
    obligan!!!!).<br>
    El problema es el siguiente:<br>
    Tengo básicamente 4 ficheros: UClass (que almacena las todas las
    clases diseñadas), UListas (la declaración e implementación de las
    listas enlazadas) , FMain (ficheros del formulario principal) y
    FInsertar (otro formulario). La verdad es que tengo más formularios
    pero el problema reside en que hago una declaración de la clase
    controladora TMITRANS (en el formulario principal FMain): <u>TMITRANS*
      scMitrans = new TMITRANS();</u> //aquí ok<br>
    <br>
    En proyectos anteriores en el otro formulario (FInsertar) para
    utilizar esta clase la incluía (#include "UClass.h") y escribía: <br>
    <u>extern TMITRANS* scMitrans = new TMITRANS();</u> //en esta linea
    me da el error E2141 Declaration syntax error<br>
    también probé, cosa que había hecho anteriormente poner solo <u>extern
      TMITRANS* scMitrans;</u><br>
    <br></div></blockquote><div><br></div><div>Si has definido 'scMitrans' en un fichero fuente y quieres usar esa misma variable global en otro fichero fuente, entonces con declarar 'scMitrans' con 'extern' es suficiente. Esto es,</div>
<div><br></div><div>// FMain.cpp</div><div><br></div><div>TMITRANS *scMitrans = new TMITRANS;</div><div>...</div><div><br></div><div><br></div><div>// FInsertar.cpp</div><div><br></div><div>extern TMITRANS *scMitrans;</div>
<div>...</div><div><br></div><div><br></div><div>Creo que el problema que estás teniendo es que defines la variable global y la declaras (externamente) en sus respectivos ficheros de cabecera. Es posible que #incluyas uno o ambos ficheros de cabecera en diferentes ficheros fuente, por lo que defines diferentes variables globales. En general, deberías definir las variables globales en un fichero fuente, y declararlas en los ficheros de cabecera. Por ejemplo, podrías hacer esto:<br>
<div><br></div><div>// FMain.cpp</div><div><br></div><div>TMITRANS *scMitrans = new TMITRANS;</div><div>...</div><div><br></div><div><br></div><div>// FInsertar.h</div><div><br></div><div>extern TMITRANS *scMitrans;</div>
<div>...</div></div><div><br></div><div><br></div><div>Recuerda que #include simplemente "vuelca" el contenido de los ficheros de cabecera en otro fichero. Esto puede suponer que copias el mismo contenido a cada fichero fuente. Si tal fichero de cabecera contiene definiciones de variables, entonces cada fichero fuente, que lo incluya, tiene una copia del contenido. Te pongo un ejemplo de un posible problema:</div>
<div><br></div><div>// defs.h</div><div>int g_var;<br></div><div><br></div><div><br></div><div>// fichero01.h</div><div>#include "defs.h"</div><div><br></div><div>// fichero01.cpp</div><div><div>#include "defs.h"</div>
</div><div><div>#include "fichero01.h"</div></div><div><br></div><div><br></div><div>Aquí tendremos un error porque estamos redefiniendo 'g_var'. Al final, el compilador obtendrá este fichero fuente que contendrá esto:<br>
<br><div>int g_var;<br></div></div><div><div>int g_var;<br></div></div><div><br></div><div><br></div><div>Como puedes ver, simplemente se copia (o se vuelca) el contenido de cada fichero de cabecera que en este caso implica definir la variable con el mismo nombre. Lo que sí podemos hacer es hacer declaraciones; por ejemplo,</div>
<div><br></div><div><div>// defs.h</div><div>extern int g_var;<br></div><div><br></div><div><br></div><div>// fichero01.h</div><div>#include "defs.h"</div><div><br></div><div>// fichero01.cpp</div><div>#include "defs.h"</div>
<div>#include "fichero01.h"</div></div><div><br></div><div>Al final, el fichero fuente contendrá:</div><div><br></div><div><div>extern int g_var;<br></div></div><div><div>int g_var;<br></div></div><div><br></div>
<div>Tenemos una declaración (externa) y una sola definición (global).</div><div><br></div><div>En general, no aconsejo escribir definiciones de variables en los ficheros de cabecera, sino en los ficheros fuente. Al fin y al cabo, no solemos necesitar las variables en los ficheros de cabecera, sino en los ficheros fuente.</div>
<div><br></div><div><br></div><div>Espero que esto te sirva.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>