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



  • @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



  • 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.



  • 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.