Inizializzazione struttura interna ad altra struttura definita in header



  • Di nuvo qua a chiedere lumi.
    All'interno dell'header dichiarative, oltre a semplici variabili ho anche la struttura di una matrice a 2 dimensioni di [1000][27] costituita da un certo numero di variabili elementari. Così:

        struct TabIndicatori {
            static int PROGRESTRATTO;
            static int ESTRATTO;
            static int RITARDO;
            static int SWESITO;
            static int TABBITS;
            static int QNTBREVE;
            static int QNTMEDIA;
            static int QNTLUNGA;
            static int QNTCOMPL;
    ...
        };
        TabIndicatori static tabindicatori [1000] [27];
    
    

    Come faccio ad inizializzare questa matrice nel modulo delle inizializzazioni ? Con la semplice istruzione

    • int HRvbl::tabindicatori [1000] [27] = {0}; mi restituisce i seguenti errori di compilazione:

    0_1500892215705_Schermata del 2017-07-24 12-29-48.png


  • Qt Champions 2018

    @bvox123 said in Inizializzazione struttura interna ad altra struttura definita in header:

    TabIndicatori static tabindicatori [1000] [27];

    Questo non credo sia valido C++


    Non e' totalmente chiaro quello che vuoi fare. vuoi inserire 27000 costanti a mano? se si puoi usare le doppie parentesi graffe: ={{}} mette tutto a 0, se vuoi inserire un valore lo devi fare a mano riga per riga: {{1,2,3,4, etcetera



  • In questo momento non posso complicarmi la vita implementando l'uso di un database: voglio avere tutto in memoria. Diciamo che le 1000 righe della matrice rappresentano le ultime 1000 estrazioni di una ruota del lotto. Una volta estratto, il numero viene elaborato e memorizzato in 27 differenti situazioni: ecco perché matrice a 2 dimensioni e non un semplice vettore. Prima di poter utilizzare la matrice, da quanto ho capito credo che sia indispensabile inizializzarla (all'inizio tutti gli elementi a zero). Non conoscevo la possibilità di mettere graffe nelle graffe, ho inserito la modifica, ma la compilazione va sempre in errore:
    0_1500899161297_Schermata del 2017-07-24 14-25-14.png


  • Qt Champions 2018

    Da come la descrivi non dovrebbe essere una static.

    Il messaggio del tuo compilatore deriva dalla definizione della stessa variabile in piu' di un file .cpp come spiegato qui: https://forum.qt.io/topic/81514/ridefinizione-di-variabili-globali-con-clausa-extern/15



  • Sono un po' confuso.
    Nell'header delle definizioni ho dichiarato la struttura TabIndicatori come ho detto poco fa e subito dopo ho dichiarato la matrice di 1000 x 27 elementi di quella struttura. A questo punto, da quanto avevo intuito l'altra volta, per potere utilizzare quella matrice la devo inizializzare. Se non la definisco subito dopo la definizioe della struct, quando provo a crearla inizializzandola mi dice:
    0_1500906082953_Schermata del 2017-07-24 16-20-35.png
    mentre se la definisco come ho detto prima, cioè inserendo nell'header static TabIndicatori tabindicatori [1000] [27]; e nel modulo .cpp la inizializzo, ho questi errori:
    0_1500906582822_Schermata del 2017-07-24 16-29-16.png

    come posso risolvere il problema ?



  • Credo di avere risolto.
    Ho portato la struct TabIndicatori al di fuori della struct HRvbl, quindi le due strutture non sono più una dentro l'altra e nella struttura HRvbl c'è solo la definizione della matrice. Così: static TabIndicatori tabindicatori [1000] [27];
    Fra le inizializzazioni c'è poi l'istruzione TabIndicatori HRvbl::tabindicatori [1000] [27] = {{}};
    Ora funziona.


  • Qt Champions 2018

    ultimo punto:

    @bvox123 said in Inizializzazione struttura interna ad altra struttura definita in header:

    per potere utilizzare quella matrice la devo inizializzare

    non esattamente, ti basta definirla, non serve inizializzarla. Puoi togliere = {{}} e funziona lo stesso. in pratica c'e' poca differenza.

    P.S.
    Non lasciare quella matrice a visibilita' (e ciclo vitale) globale. Quasi sicuramente non ce n'e' bisogno.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.