<div dir="ltr">Otra opción que tienes es crear una clase, dentro de ella declaras las variables como "static" y en cada parte del programa que debas utilizarlas, creas una instancia de esa clase y utilizas las variables. El hecho de haberlas declarado como static tendrán el mismo valor en todas las instancias dado que es el mismo lugar de memoria, es decir, el espacio de memoria donde están sus datos es usado por todas las instancias de esa clase (miembros static).<div><br></div><div>otra opción pero más lenta es guardar esos valores en registro de windows, con la merma en velocidad que dará la lectura y escritura en el registro y los privilegios que pudiera pedir Windows. Esta última opción sería útil si quieres conservar esos valores incluso después de terminada la aplicación y reutilizarlos en futuras ejecuciones de tu aplicación o por otros programas ajenos al tuyo.</div><div><br></div><div>¡Salu2! </div></div><div class="gmail_extra"><br><div class="gmail_quote">El 25 de abril de 2016, 0:25,  <span dir="ltr"><<a href="mailto:cconclase-request@listas.conclase.net" target="_blank">cconclase-request@listas.conclase.net</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Envíe los mensajes para la lista Cconclase a<br>
        <a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a><br>
<br>
Para subscribirse o anular su subscripción a través de la WEB<br>
        <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" rel="noreferrer" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
<br>
<br>
O por correo electrónico, enviando un mensaje con el texto "help" en<br>
el asunto (subject) o en el cuerpo a:<br>
        <a href="mailto:cconclase-request@listas.conclase.net">cconclase-request@listas.conclase.net</a><br>
<br>
Puede contactar con el responsable de la lista escribiendo a:<br>
        <a href="mailto:cconclase-owner@listas.conclase.net">cconclase-owner@listas.conclase.net</a><br>
<br>
Si responde a algún contenido de este mensaje, por favor, edite la<br>
linea del asunto (subject) para que el texto sea mas especifico que:<br>
"Re: Contents of Cconclase digest...". Además, por favor, incluya en<br>
la respuesta sólo aquellas partes del mensaje a las que está<br>
respondiendo.<br>
<br>
<br>
Asuntos del día:<br>
<br>
   1. Tener una clase con miembros accesibles en cualquier archivo<br>
      de la aplicación. (marcelinux)<br>
   2. Re: Tener una clase con miembros accesibles en cualquier<br>
      archivo de la aplicación. (Yolmer Rosales)<br>
   3. Re: Tener una clase con miembros accesibles en cualquier<br>
      archivo de la aplicación. (Davidson, Steven)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Sun, 24 Apr 2016 21:32:00 +0200<br>
From: marcelinux <<a href="mailto:marcelinator@gmail.com">marcelinator@gmail.com</a>><br>
To: <a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a><br>
Subject: [C con Clase] Tener una clase con miembros accesibles en<br>
        cualquier archivo de la aplicación.<br>
Message-ID: <<a href="mailto:E1auPlA-0004S9-6d@ender.h3m.com">E1auPlA-0004S9-6d@ender.h3m.com</a>><br>
Content-Type: text/plain; charset=UTF-8<br>
<br>
Hola.<br>
La idea es tener una clase con miembros accesibles en cualquier archivo de la aplicación.<br>
<br>
Imaginemos que tengo una aplicación en la que necesitaré unas variables globales.<br>
Cuando digo globales, no me refiero al mismo archivo, sino a todos los archivos de la aplicación.<br>
Por ejemplo: En el archivo main.cpp declaro unas variables globales.<br>
En otro archivo donde se define una clase, quiero usar aquellas globales.<br>
Para ello, declararía las globales con extern.<br>
Lo haría más o menos así:<br>
<br>
Archivo main.cpp<br>
// Usar variables en otro archivo<br>
#include <iostream><br>
#include <string><br>
#include "clase.h"<br>
<br>
// Definir las variables globales<br>
int global1;<br>
float global2;<br>
std::string global3;<br>
<br>
int main()<br>
{<br>
    std::cout << "Asignar valores a las variables globales." << std::endl;<br>
    global1 = 123;<br>
    global2 = 123.45;<br>
    global3 = "cadena global";<br>
    std::cout << "global1 = " << global1 << std::endl;<br>
    std::cout << "global2 = " << global2 << std::endl;<br>
    std::cout << "global3 = " << global3 << std::endl;<br>
<br>
    // Accedemos a la clase donde operaremos con las variables globales<br>
    Clase miClase;<br>
    miClase.mostrar();<br>
<br>
    return 0;<br>
}<br>
<br>
Archivo clase.h<br>
#ifndef CLASE_H<br>
#define CLASE_H<br>
// Clase.<br>
// Mostrará las variables globales externas<br>
class Clase<br>
{<br>
    public:<br>
        void mostrar();<br>
};<br>
#endif // CLASE_H<br>
<br>
Archivo clase.cpp<br>
// Definición de Clase<br>
#include <iostream><br>
#include <string><br>
#include "clase.h"<br>
<br>
extern int global1;<br>
extern float global2;<br>
extern std::string global3;<br>
<br>
void Clase::mostrar()<br>
{<br>
    std::cout << "Valor de global1 desde la clase: " << global1 << std::endl;<br>
    std::cout << "Valor de global2 desde la clase: " << global2 << std::endl;<br>
    std::cout << "Valor de global3 desde la clase: " << global3 << std::endl;<br>
    return;<br>
}<br>
<br>
Y la pregunta es:<br>
¿Cómo podría "agrupar" esas variables en una "struct" o "class"?<br>
Si hago algo como extern class varGlobales;<br>
el compilador me devuelve un error: a storage class can only be specified for objects and functions<br>
<br>
Mi compilador es g++ (Debian 5.3.1-14) 5.3.1 20160409<br>
<br>
Muchas gracias.<br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Sun, 24 Apr 2016 20:50:01 -0430<br>
From: Yolmer Rosales <<a href="mailto:yolmer.rosales@gmail.com">yolmer.rosales@gmail.com</a>><br>
To: "Lista de correo sobre C y C++" <<a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a>><br>
Subject: Re: [C con Clase] Tener una clase con miembros accesibles en<br>
        cualquier archivo de la aplicación.<br>
Message-ID:<br>
        <CAGTFLE8V5iO3Ne7SbXVnm7i9=_<a href="mailto:9akmwZw6nzLgeGwFMWCvpHiQ@mail.gmail.com">9akmwZw6nzLgeGwFMWCvpHiQ@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
¿Por qué no simplemente la metes dentro de la clase?<br>
si la vas a utilizar dentro de la clase tal vez son parte de los atributos<br>
<br>
también la puedes pasar como parámetros a la clase...<br>
<br>
Por último puedes hacer un archivo de cabecera que contenga las variables e<br>
incluirlo en la definición de clase y el main<br>
<br>
<br>
no se es lo que se me ocurre<br>
<br>
El 24 de abril de 2016, 15:02, marcelinux <<a href="mailto:marcelinator@gmail.com">marcelinator@gmail.com</a>> escribió:<br>
<br>
> Hola.<br>
> La idea es tener una clase con miembros accesibles en cualquier archivo de<br>
> la aplicación.<br>
><br>
> Imaginemos que tengo una aplicación en la que necesitaré unas variables<br>
> globales.<br>
> Cuando digo globales, no me refiero al mismo archivo, sino a todos los<br>
> archivos de la aplicación.<br>
> Por ejemplo: En el archivo main.cpp declaro unas variables globales.<br>
> En otro archivo donde se define una clase, quiero usar aquellas globales.<br>
> Para ello, declararía las globales con extern.<br>
> Lo haría más o menos así:<br>
><br>
> Archivo main.cpp<br>
> // Usar variables en otro archivo<br>
> #include <iostream><br>
> #include <string><br>
> #include "clase.h"<br>
><br>
> // Definir las variables globales<br>
> int global1;<br>
> float global2;<br>
> std::string global3;<br>
><br>
> int main()<br>
> {<br>
>     std::cout << "Asignar valores a las variables globales." << std::endl;<br>
>     global1 = 123;<br>
>     global2 = 123.45;<br>
>     global3 = "cadena global";<br>
>     std::cout << "global1 = " << global1 << std::endl;<br>
>     std::cout << "global2 = " << global2 << std::endl;<br>
>     std::cout << "global3 = " << global3 << std::endl;<br>
><br>
>     // Accedemos a la clase donde operaremos con las variables globales<br>
>     Clase miClase;<br>
>     miClase.mostrar();<br>
><br>
>     return 0;<br>
> }<br>
><br>
> Archivo clase.h<br>
> #ifndef CLASE_H<br>
> #define CLASE_H<br>
> // Clase.<br>
> // Mostrará las variables globales externas<br>
> class Clase<br>
> {<br>
>     public:<br>
>         void mostrar();<br>
> };<br>
> #endif // CLASE_H<br>
><br>
> Archivo clase.cpp<br>
> // Definición de Clase<br>
> #include <iostream><br>
> #include <string><br>
> #include "clase.h"<br>
><br>
> extern int global1;<br>
> extern float global2;<br>
> extern std::string global3;<br>
><br>
> void Clase::mostrar()<br>
> {<br>
>     std::cout << "Valor de global1 desde la clase: " << global1 <<<br>
> std::endl;<br>
>     std::cout << "Valor de global2 desde la clase: " << global2 <<<br>
> std::endl;<br>
>     std::cout << "Valor de global3 desde la clase: " << global3 <<<br>
> std::endl;<br>
>     return;<br>
> }<br>
><br>
> Y la pregunta es:<br>
> ¿Cómo podría "agrupar" esas variables en una "struct" o "class"?<br>
> Si hago algo como extern class varGlobales;<br>
> el compilador me devuelve un error: a storage class can only be specified<br>
> for objects and functions<br>
><br>
> Mi compilador es g++ (Debian 5.3.1-14) 5.3.1 20160409<br>
><br>
> Muchas gracias.<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" rel="noreferrer" 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" rel="noreferrer" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
><br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a href="http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160424/3a8a546e/attachment-0001.html" rel="noreferrer" target="_blank">http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160424/3a8a546e/attachment-0001.html</a>><br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Mon, 25 Apr 2016 02:33:17 -0400<br>
From: "Davidson, Steven" <<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>><br>
To: "Lista de correo sobre C y C++" <<a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a>><br>
Subject: Re: [C con Clase] Tener una clase con miembros accesibles en<br>
        cualquier archivo de la aplicación.<br>
Message-ID:<br>
        <CAFBM+1zoGzxcGsuVLe0cA4Rz9GHxBC5u2NT1zs4E10UF=<a href="mailto:eTKRQ@mail.gmail.com">eTKRQ@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
Hola Marcelinux,<br>
<br>
Para agrupar entidades, puedes usar espacios denominados (namespaces, en<br>
inglés), aunque la preparación es básicamente la misma que has hecho,<br>
excepto que creas tu propio ámbito. Por ejemplo,<br>
<br>
// main.cpp<br>
<br>
namespace ns<br>
{<br>
int global1;<br>
float global2;<br>
std::string global3;<br>
}<br>
<br>
int main()<br>
{<br>
  ns::global1 = 123;<br>
  ns::global2 = 123.45f;<br>
  ns::global3 = "cadena global en 'ns'";<br>
<br>
  std::cout << "global1 = " << ns::global1 << std::endl;<br>
  std::cout << "global2 = " << ns::global2 << std::endl;<br>
  std::cout << "global3 = " << ns::global3 << std::endl;<br>
<br>
  Clase miClase;<br>
  miClase.mostrar();<br>
<br>
  return 0;<br>
}<br>
<br>
<br>
// clase.cpp<br>
<br>
namespace ns<br>
{<br>
extern int global1;<br>
extern float global2;<br>
extern std::string global3;<br>
}<br>
<br>
void Clase::mostrar()<br>
{<br>
  std::cout << "Valor de global1 desde el espacio denominado: " <<<br>
ns::global1 << std::endl;<br>
  std::cout << "Valor de global2 desde el espacio denominado: " <<<br>
ns::global2 << std::endl;<br>
  std::cout << "Valor de global3 desde el espacio denominado: " <<<br>
ns::global3 << std::endl;<br>
}<br>
<br>
<br>
Si de verdad quieres usar una clase, entonces sólo debes definir los<br>
miembros como estáticos; esto es,<br>
<br>
// main.cpp<br>
<br>
int Clase::global1;<br>
float Clase::global2;<br>
std::string Clase::global3;<br>
<br>
int main()<br>
{<br>
  Clase::global1 = 123;<br>
  Clase::global2 = 123.45f;<br>
  Clase::global3 = "cadena global";<br>
  std::cout << "global1 = " << Clase::global1 << std::endl;<br>
  std::cout << "global2 = " << Clase::global2 << std::endl;<br>
  std::cout << "global3 = " << Clase::global3 << std::endl;<br>
<br>
  Clase miClase;<br>
  miClase.mostrar();<br>
<br>
  return 0;<br>
}<br>
<br>
<br>
// clase.cpp<br>
<br>
void Clase::mostrar()<br>
{<br>
  std::cout << "Valor de global1 desde la clase: " << Clase::global1 <<<br>
std::endl;<br>
  std::cout << "Valor de global2 desde la clase: " << Clase::global2 <<<br>
std::endl;<br>
  std::cout << "Valor de global3 desde la clase: " << Clase::global3 <<<br>
std::endl;<br>
}<br>
<br>
<br>
Espero que esto te sirva.<br>
<br>
Steven<br>
<br>
<br>
2016-04-24 15:32 GMT-04:00 marcelinux <<a href="mailto:marcelinator@gmail.com">marcelinator@gmail.com</a>>:<br>
<br>
> Hola.<br>
> La idea es tener una clase con miembros accesibles en cualquier archivo de<br>
> la aplicación.<br>
><br>
> Imaginemos que tengo una aplicación en la que necesitaré unas variables<br>
> globales.<br>
> Cuando digo globales, no me refiero al mismo archivo, sino a todos los<br>
> archivos de la aplicación.<br>
> Por ejemplo: En el archivo main.cpp declaro unas variables globales.<br>
> En otro archivo donde se define una clase, quiero usar aquellas globales.<br>
> Para ello, declararía las globales con extern.<br>
> Lo haría más o menos así:<br>
><br>
> Archivo main.cpp<br>
> // Usar variables en otro archivo<br>
> #include <iostream><br>
> #include <string><br>
> #include "clase.h"<br>
><br>
> // Definir las variables globales<br>
> int global1;<br>
> float global2;<br>
> std::string global3;<br>
><br>
> int main()<br>
> {<br>
>     std::cout << "Asignar valores a las variables globales." << std::endl;<br>
>     global1 = 123;<br>
>     global2 = 123.45;<br>
>     global3 = "cadena global";<br>
>     std::cout << "global1 = " << global1 << std::endl;<br>
>     std::cout << "global2 = " << global2 << std::endl;<br>
>     std::cout << "global3 = " << global3 << std::endl;<br>
><br>
>     // Accedemos a la clase donde operaremos con las variables globales<br>
>     Clase miClase;<br>
>     miClase.mostrar();<br>
><br>
>     return 0;<br>
> }<br>
><br>
> Archivo clase.h<br>
> #ifndef CLASE_H<br>
> #define CLASE_H<br>
> // Clase.<br>
> // Mostrará las variables globales externas<br>
> class Clase<br>
> {<br>
>     public:<br>
>         void mostrar();<br>
> };<br>
> #endif // CLASE_H<br>
><br>
> Archivo clase.cpp<br>
> // Definición de Clase<br>
> #include <iostream><br>
> #include <string><br>
> #include "clase.h"<br>
><br>
> extern int global1;<br>
> extern float global2;<br>
> extern std::string global3;<br>
><br>
> void Clase::mostrar()<br>
> {<br>
>     std::cout << "Valor de global1 desde la clase: " << global1 <<<br>
> std::endl;<br>
>     std::cout << "Valor de global2 desde la clase: " << global2 <<<br>
> std::endl;<br>
>     std::cout << "Valor de global3 desde la clase: " << global3 <<<br>
> std::endl;<br>
>     return;<br>
> }<br>
><br>
> Y la pregunta es:<br>
> ¿Cómo podría "agrupar" esas variables en una "struct" o "class"?<br>
> Si hago algo como extern class varGlobales;<br>
> el compilador me devuelve un error: a storage class can only be specified<br>
> for objects and functions<br>
><br>
> Mi compilador es g++ (Debian 5.3.1-14) 5.3.1 20160409<br>
><br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a href="http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160425/b1712b51/attachment.html" rel="noreferrer" target="_blank">http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160425/b1712b51/attachment.html</a>><br>
<br>
------------------------------<br>
<br>
Subject: Pié de página del digest<br>
<br>
_______________________________________________<br>
Cconclase mailing list<br>
<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" rel="noreferrer" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
<br>
<br>
------------------------------<br>
<br>
Fin de Resumen de Cconclase, Vol 117, Envío 7<br>
*********************************************<br>
</blockquote></div><br></div>