Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] static const double ...

    codice:
    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?!

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    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:
    codice:
    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.

  3. #3
    Non puoi definire e inizializzare nel corpo della classe costanti di tipo non intero direttamente nella definizione della classe, come spiegato qui (un'idea del perché ci sia questa regola - ora abolita nell'ultimo standard C++ - è spiegata poco sopra).

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

    Nel .h:
    codice:
    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:
    codice:
    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;
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.