PDA

Visualizza la versione completa : [C++] Definire una costante static di tipo double


zannas
22-12-2011, 21:55
class Acciaio {
//valori fissati da NTC08
static const double f_yk = 450; //tensione di snervamento in MPa
static const double f_tk = 540; //tensione di rottura in MPa

//parametri fissati da NTC08
static const double gamma_s = 1.15;

static const double f_yd = f_yk/gamma_s; //resistenza di calcolo acciaio
....
};

Ottengo:

error: 'Acciaio::f_yk' cannot appear in a constant-expression
error: 'Acciaio::gamma_s' cannot appear in a constant-expression

che sbaglio?!

ramy89
22-12-2011, 22:38
Il perchè di questo non lo so, forse perchè il compilatore non è in grado di risolvere,ma puoi ovviare a questo problema dichiarando quelle costanti statiche fuori dalla classe,come variabili globali.Oppure evitando di assegnargli come valore un' altra costante, ad esempio per f_yd scrivi:


static const double f_yd=450.0/540.0;

Strano il fatto che fuori dalla classe lo permette e all' interno no.
Mi accodo per sapere il perchè di questo se qualcuno lo sa.

MItaly
22-12-2011, 22:48
Non puoi definire e inizializzare nel corpo della classe costanti di tipo non intero direttamente nella definizione della classe, come spiegato qui (http://stackoverflow.com/a/370433/214671) (un'idea del perché ci sia questa regola - ora abolita nell'ultimo standard C++ - è spiegata poco sopra (http://stackoverflow.com/a/370311/214671)).

Devi quindi dichiararle nel corpo della classe e definirle in un singolo .cpp.

Nel .h:


class Acciaio {
//valori fissati da NTC08
static const double f_yk; //tensione di snervamento in MPa
static const double f_tk; //tensione di rottura in MPa

//parametri fissati da NTC08
static const double gamma_s;

static const double f_yd; //resistenza di calcolo acciaio
....
};
nel .cpp:


double const Acciaio::f_yk = 450.;
double const Acciaio::f_tk = 540.;
double const Acciaio::gamma_s = 1.15;
double const Acciaio::f_yd = Acciaio::f_yk/Acciaio::gamma_s;

Loading