2010-06-11 18 views
7

Chcę zdefiniować strukturę, w której będą przechowywane stałe matematyczne.
Oto co mam teraz:Statyczna struktura w C++

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

const double consts::gamma = 2350; 

To działa dobrze, ale nie będzie więcej niż 10 floating point stałe, więc nie chce napisał „static const” przed każdym z nich. I zdefiniować coś takiego:

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

const double consts::gamma = 2350; 

to wyglądało w porządku, ale mam te błędy:
1. Państwa funkcyjny ponowna niedozwolone
2. nonstatic Państwa dane nie mogą być definiowane poza jego klasie

Zastanawiam się, czy istnieje sposób C++ to zrobić?

+0

10 nie jest wiele. Po prostu skopiuj i wklej porcję 'static const double'. –

+1

Jestem przekonany, że kopiuj-wklej w kodzie jest największym złem :) – Andrew

+3

Kopiuj-wklej __logic__ to wielkie zło. Kopiuj-wklej statycznego const double ... nie tak bardzo. Jeśli potrzebujesz 10 stałych, musisz je zadeklarować. – jmucchiello

Odpowiedz

27

Użyj przestrzeni nazw zamiast próbować utworzyć strukturę w przestrzeni nazw.

namespace consts{ 
    const double gamma = 2350; 
} 

Metoda dostępu do danych ma dokładnie takie samo źródło. Tak więc na przykład:

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

Przepraszam, opieczętowałem twoją zmianę :( –

+0

@David Nie ma problemu, dziękuję za edycję, prawie zapomniałem o tym, że zapomniałem wpisać tam typ – Yacoby

+0

Dzięki, właśnie tego chcę :) – Andrew

10

Brzmi jak ty tak naprawdę chcesz nazw:

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

wyjątkiem, że staram się wymyślić lepszej nazwy niż consts dla niego.

+0

Przepraszamy za zmianę, kliknąłem niewłaściwy przycisk. –