2010-06-11 19 views
7

Quiero definir una estructura, donde se almacenarían algunas constantes matemáticas.
Aquí lo que tengo ahora:Estructura estática en C++

struct consts { 
    //salt density kg/m3 
    static const double gamma; 
}; 

const double consts::gamma = 2350; 

Funciona bien, pero no habría más de 10 constantes de punto flotante, por lo que no quiere escribió 'static const' antes de cada uno de ellos. Y definir algo así:

static const struct consts { 
    //salt density kg/m3 
    double gamma; 
}; 

const double consts::gamma = 2350; 

Que se vea bien, pero tengo estos errores: 1.
miembro de la función redeclaración no permitido
2. un miembro de datos no estático no puede ser definida fuera de su clase

Me pregunto si existe alguna forma de C++ para hacerlo?

+0

10 no es mucho. Solo copie y pegue la porción 'static const double'. –

+1

Estoy convencido de que copiar y pegar en el código es un gran mal :) – Andrew

+3

Copiar y pegar de __logic__ es un gran mal. Copiar y pegar de static const double ... no tanto. Si necesita 10 consts, necesita declararlos. – jmucchiello

Respuesta

27

Use un espacio de nombres en lugar de intentar crear una estructura en un espacio de nombres.

namespace consts{ 
    const double gamma = 2350; 
} 

El método de acceso a los datos también tiene exactamente la misma synatx. Así, por ejemplo:

double delta = 3 * consts::gamma; 
+0

Disculpa, he estampado tu cambio :( –

+0

@David No hay problema, gracias por la edición. Casi me olvidé del hecho de que había olvidado poner un tipo allí. – Yacoby

+0

Gracias, eso es exactamente lo que quiero :) – Andrew

10

Suena como si realmente sólo quieren un espacio de nombres:

namespace consts { 
    const double gamma = 2350.0; 
    // ... 
} 

Salvo que iba a tratar de llegar a un nombre mejor que consts por ello.

+0

Perdón por la edición, hice clic en el botón incorrecto. –