2010-06-11 16 views
7

Je veux définir une structure, où certaines constantes mathématiques seraient stockées.
Voici ce que j'ai maintenant:Structure statique en C++

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

const double consts::gamma = 2350; 

Il fonctionne très bien, mais il y aurait plus de 10 constantes à virgule flottante, donc je ne veux pas écrit « const statique » avant chacun d'eux. Et définir quelque chose comme ça:

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

const double consts::gamma = 2350; 

Il semble bien, mais je suis arrivé ces erreurs:
1. Fonction membre redéclaration pas permis
2. un membre non statique de données ne peut pas être défini en dehors de sa classe

Je me demandais s'il y avait un moyen de le faire en C++?

+0

10 n'est pas beaucoup. Il suffit de copier-coller la partie 'static const double'. –

+1

Je suis convaincu que copier-coller dans le code est un plus grand mal :) – Andrew

+3

Copier-coller de __logic__ est un gros mal. Copier-coller de const const statique ... pas tellement. Si vous avez besoin de 10 constats, vous devez les déclarer. – jmucchiello

Répondre

27

Utilisez un espace de noms plutôt que d'essayer de créer une structure dans un espace de noms.

namespace consts{ 
    const double gamma = 2350; 
} 

La méthode d'accès aux données a également exactement le même synatx. Ainsi, par exemple:

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

Désolé, j'ai tamponné sur votre changement :( –

+0

@David Pas de problème, merci pour l'édition.J'ai presque manqué le fait que j'avais oublié d'y mettre un type – Yacoby

+0

Merci, c'est exactement ce que je veux :) – Andrew

10

On dirait que vous voulez vraiment juste un espace de noms:

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

Sauf que je vais essayer de trouver un meilleur nom que consts pour elle.

+0

Désolé pour l'édition, j'ai cliqué sur le mauvais bouton. –