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:
-
@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:
-
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:
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:
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.