Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Guglie
    Registrato dal
    Dec 2002
    Messaggi
    1,572

    [C++] variabile globale

    è un po' che non scrivo in C++, lo ammetto..

    la variabile globale vorrei in futuro poterla passare come argomento, quindi non posso metterla nel preprocessore.
    ho provato così:
    codice:
    //: file: main.cpp
    #include "tavola.h"
    
    const int lato = 10;
    
    int main (int argc, char *argv[])
    {
      tavola tavola_1;
      return 0;
    }
    codice:
    //: file: tavola.h
    #include "casella.h"
    
    class tavola
    {
    private:
    	casella* griglia[lato][lato];
    };
    compilando con gcc 3.4.6 mi da come errore:
    codice:
    `lato' was not declared in this scope
    powered by GNU/Linux Gentoo
    A Elbereth Gilthoniel o menel palan-diriel, le nallon sí di-nguruthos! A tiro nin, Fanuilos!

  2. #2
    Perforza si trova su un altro file.
    dovresti fare
    codice:
     #define LATO 10
    in tavola.h

  3. #3
    Utente di HTML.it L'avatar di Guglie
    Registrato dal
    Dec 2002
    Messaggi
    1,572
    Originariamente inviato da menphisx
    Perforza si trova su un altro file.
    infatti
    io vorrei prima di tutto definire la variabile (in realtà una costante) in un solo file e utilizzarla in tutti gli altri.
    inoltre, se possibile, vorrei in futuro passare la variabile come argomento di main(), e quindi preferirei evitare #define
    powered by GNU/Linux Gentoo
    A Elbereth Gilthoniel o menel palan-diriel, le nallon sí di-nguruthos! A tiro nin, Fanuilos!

  4. #4
    Allora se vuoi usare una costante puoi benissimo farlo modificando l'ordine di includsione/dichiarazione:

    codice:
    const int lato = 10;
    
    #include "tavola.h"
    
    int main (int argc, char *argv[])
    {
      tavola tavola_1;
      return 0;
    }
    Se successivamente vuoi modificare, in modo che la costante lato diventi una variabile, devi anche modificare la struttura in quanto NON puoi utilizzare una variabile per dichiarare una matrice statica...
    codice:
    //: file: main.cpp
    #include "tavola.h"
    
    int lato;
    
    int main (int argc, char *argv[])
    {
        lato = atoi(argv[1]);
        tavola tavola_1(lato);
        return 0;
    }
    codice:
    #include "casella.h"
    
    class tavola
    {
    private:
    	casella **griglia;
    public:
    	//Costruttore: Crea una griglia lxl. Se nessun valore e'
    	//specificato l = 1
        tavola(int l = 1)
        {
    		griglia = new casella*[l];
    		for(int i = 0; i < l; ++i)
    		{
    			griglia[i] = new casella[l];
    		}
    	}
    };

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Altrimenti lascia tutto come sta e prima della definizione della tua classe aggiungi
    codice:
    extern int lato;
    La tua variabile sarà linkata in automatico
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di Guglie
    Registrato dal
    Dec 2002
    Messaggi
    1,572
    ho provato sia con "#define LATO 10" sia con "const int LATO=10;" e entrambe funzionano se le metto in un header che includo quando mi serve la costante in questione, ma non funzionano se metto la dichiarazione in main.cpp prima delle inclusioni, come mi avete suggerito voi:

    codice:
    //: file: main.cpp
    //. date: september 2006
    
    const int LATO=10;
    
    #include "tavola.h"
    
    int main (int argc, char *argv[])
    {
      tavola tavola_1;
      return 0;
    }
    powered by GNU/Linux Gentoo
    A Elbereth Gilthoniel o menel palan-diriel, le nallon sí di-nguruthos! A tiro nin, Fanuilos!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.