[C con Clase] Tener una clase con miembros accesibles en cualquier archivo de la aplicación.

marcelinux marcelinator en gmail.com
Dom Abr 24 21:32:00 CEST 2016


Hola.
La idea es tener una clase con miembros accesibles en cualquier archivo de la aplicación.

Imaginemos que tengo una aplicación en la que necesitaré unas variables globales.
Cuando digo globales, no me refiero al mismo archivo, sino a todos los archivos de la aplicación.
Por ejemplo: En el archivo main.cpp declaro unas variables globales.
En otro archivo donde se define una clase, quiero usar aquellas globales.
Para ello, declararía las globales con extern.
Lo haría más o menos así:

Archivo main.cpp
// Usar variables en otro archivo
#include <iostream>
#include <string>
#include "clase.h"

// Definir las variables globales
int global1;
float global2;
std::string global3;

int main()
{
    std::cout << "Asignar valores a las variables globales." << std::endl;
    global1 = 123;
    global2 = 123.45;
    global3 = "cadena global";
    std::cout << "global1 = " << global1 << std::endl;
    std::cout << "global2 = " << global2 << std::endl;
    std::cout << "global3 = " << global3 << std::endl;

    // Accedemos a la clase donde operaremos con las variables globales
    Clase miClase;
    miClase.mostrar();

    return 0;
}

Archivo clase.h
#ifndef CLASE_H
#define CLASE_H
// Clase.
// Mostrará las variables globales externas
class Clase
{
    public:
        void mostrar();
};
#endif // CLASE_H

Archivo clase.cpp
// Definición de Clase
#include <iostream>
#include <string>
#include "clase.h"

extern int global1;
extern float global2;
extern std::string global3;

void Clase::mostrar()
{
    std::cout << "Valor de global1 desde la clase: " << global1 << std::endl;
    std::cout << "Valor de global2 desde la clase: " << global2 << std::endl;
    std::cout << "Valor de global3 desde la clase: " << global3 << std::endl;
    return;
}

Y la pregunta es:
¿Cómo podría "agrupar" esas variables en una "struct" o "class"?
Si hago algo como extern class varGlobales;
el compilador me devuelve un error: a storage class can only be specified for objects and functions

Mi compilador es g++ (Debian 5.3.1-14) 5.3.1 20160409

Muchas gracias.


Más información sobre la lista de distribución Cconclase