Variabili globali (extern o static ?)

di il
11 risposte

Variabili globali (extern o static ?)

Buonasera.
Leggo su un sito che si può definire una variabile globale anteponendo ad essa la voce extern e dichiararla poi in qualche altro file che costituisce il programma.
In virtù di questo, ho creato le seguenti variabili all'inizio del programma, fuori da qualsiasi funzione:
extern structTabIndicatori TabIndicatori [DIMENSIONETABELLA + 1] [COMBINAZIONIPREVISTE + 1];
extern structCondizioni TabCondizioni [20 + 1];
extern structImmaginiVarie ImmaginiVarie;
extern structHRvbl HRvbl;
ma non compila perché le variabili non risultano raggiungibili. Se invece di extern metto la voce "static" la compilazione va bene, ma se valorizzo una variabile in un modulo non la ritrovo valorizzata in un altro modulo. Ovvero, non ho capito come si dichiarano ed usano le variabili globali.
Mi date una mano ? Molte grazie.

11 Risposte

  • Re: Variabili globali (extern o static ?)

    Va bene la extern ma la variabile poi in quale modulo è effettivamente dichiarata?
  • Re: Variabili globali (extern o static ?)

    In testa al modulo Dichiarative ci sono le strutture di cui ho bisogno e poi le dichiarazioni sono così:

    extern structTabIndicatori TabIndicatori [DIMENSIONETABELLA + 1] [COMBINAZIONIPREVISTE + 1];
    extern structCondizioni TabCondizioni [20 + 1];
    extern structImmaginiVarie ImmaginiVarie;
    extern structHRvbl HRvbl;

    class HRnet {
    public:
    HRnet();
    virtual ~HRnet();

    structTabIndicatori TabIndicatori [DIMENSIONETABELLA + 1] [COMBINAZIONIPREVISTE + 1];
    structCondizioni TabCondizioni [20 + 1];
    structImmaginiVarie ImmaginiVarie;
    structHRvbl HRvbl;

    };

    Credevo che la definizione fuori dalla classe le rendesse globali, ma a livello compilazione ho l'errore:
    'Undefined reference to HRvbl' e molti altri. Errori che non mi vengono evidenziati dall'IDE.
  • Re: Variabili globali (extern o static ?)

    Siccome è lo stesso argomento dell'altro topic, sei riuscito almeno a capire come funziona con le variabili semplici, senza struct di mezzo? tipo int test e extern int test?
  • Re: Variabili globali (extern o static ?)

    Non ho provato. Stamani ero riuscito a compilare definendo le prime 4 come static ed omettendo la classe (quindi Dichiarative è un modulo senza classi). Poi in esecuzione, entra nel primo modulo e valorizzo una variabile della struttura HRvbl, poi entro nel costruttore del secondo modulo e quella variabile non la trovo valorizzata, però la trovo inizializzata a zero.
  • Re: Variabili globali (extern o static ?)

    Ma la variabile che vorresti pubblica è un membro di una classe? Stai facendo confusione....
  • Re: Variabili globali (extern o static ?)

    Il problema è sempre quello dell'altro giorno, ma nelle varie prove che ho fatto ho eliminato l'eredità di tutte le classi da Dichiarative dato che mi dava solo problemi, quindi il consiglio che chiedo oggi è un po' diverso dal quello dell'altro giorno.
  • Re: Variabili globali (extern o static ?)

    Che sto facendo confusione ne sono convinto. Le variabili sono voci di quelle strutture e sono dichiarate prima di ogni classe. Il loro utilizzo all'interno di un modulo è così:
    MainWindow::MainWindow() {
    HRvbl.HRnet_MAIN = this;
    // HRvbl.HRnet_MAIN_salvato = HRnet_MAIN;
    cout << "Indirizzo2 HRnet_MAIN : " << HRvbl.HRnet_MAIN << endl;
    HRvbl.intestazione = "HRnet 19.10.15";

    Dopo un po' chiamo un altro modulo e Hrvbl.intestazione risulta vuoto.
  • Re: Variabili globali (extern o static ?)

    Non so che stai facendo... non si capisce ma come ti hanno detto fai un progetto semplice di prova con un int e comprendi come funziona ... se è quello che ti serve
  • Re: Variabili globali (extern o static ?)

    Ok farò così. Ma potresti dirmi l'uso di static, visto che con static la compilazione va a buon fine ?
  • Re: Variabili globali (extern o static ?)

    Https://www.html.it/pag/72183/il-qualificatore-static
  • Re: Variabili globali (extern o static ?)

    Molte grazie, sei stato gentilissimo.
Devi accedere o registrarti per scrivere nel forum
11 risposte