Ciao,
se nn ti spiace rispondo io a questa domandina...
Innanzi tutto, un consiglio per i file header:
includi tutto il file in direttive del genere:
#ifndef __PLUTO_H__
#define __PLUTO_H__
....
codice
...
#endif
Questo ti permette di evitare inclusioni multiple del file header. E' buona norma usarlo.
usare __NOME_ESTENSIONE__ e' una mia convenzione, se vuoi, io ho imparato a fare coi' e mi sembra comoda.
Ora passo alla tua domanda:
in genete, negli header, viene messo tutto quel codice che non crea variabili: cioe' le dichiarazioni (di classi, di funzioni, variabili externe eccetera)
questo perche':
se tu metti delle variabili in un file header, nel moneto in cui compili 2 (o +) file cpp che includono il file header, il linker ti dara' un errore.
Ora, e tu crei un file h, ci crei dentro una varaibile, poi includi quell'header in un SINGOLO file CPP, allora nessun problema. Nel momento in cui includi quel file H in piu' file CPP, il compilatore, quando compila i file CPP, si trova 2 o piu' variabili IDENTICHE. Nel momento in cui i file vengono compilati in file oggetto, ok, nessun problema. Quando invece entra in azione il Linker, si trova a dover linkare UNA delle 2 variabili che sono state dichiarate. E dato che il linke e' preciso, non ne prende una a caso, ma i ferma e da un errore.
Questa e' la spiegazione del perche' tutto non si mette nel file CPP o tutto nell'H.
E inoltre, e' piu' comodo poter usare le stesse funzioni in diverse parti di un programma, che se complesso, non dovrebbe essere sviluppato in un singolo file.
LA SINTESI DI TUTTO QUESTO E':
Nei file Headrer ci va TUTTO CIO' CHE NON PRODUCE VARIABILI. Quindi SOLO definizioni.
Capito??
ciao




Rispondi quotando