Newsgroup: it.comp.lang.c++
Titolo: Header files

Scusate probabilmente voglio fare una cosa poco pulita e il VC 6.0++ mi da
errore in compilazione.
Ho incluso negli Header files un file Variabili_Globali.h in cui ho messo
tutte le costanti, dichiarazioni di tipi, ma anche tutte le variabili che
sono utilizzate da vari moduli .c.
Ovviamente questo Variabili_Globali.h e poi incluso dai vari moduli che
hanno bisogno di usare le variabili e le costanti li dichiarate. Ovviamente
il file è stato fatto come segue:
#ifndef Variabili_Globali
#define Variabili_Globali
..........
.........
Seguono tutte le costanti, dichiarazioni di tipi e variabili globali.
.........
.........
#endif
Non mi da problemi in compilazione, ma qundo va ha lincare mi da una serie
di errori del tipo:
Linking...
Conversione_Colori.obj : error LNK2005: _tracciare already defined in
Cattura.obj
Ho fatto ciò per non includere le variabili come extern ...
mi da fastidio e non mi piace molto.
Fare così è l'unico modo?
Non posso fare diversamente?
Grazie

 Non posso fare diversamente?
Non vedo il codice, ma indovino che negli header file devi usare extern 
(ovvero dichiari le variabili), e nei .cpp le definisci. Mi dispiace che 
ti dia fastidio...
-- 
There are better things in life than alcohol, but alcohol makes up for 
not having them. - Terry Pratchett.

 ti dia fastidio...
Metto qualche linea di codice:
Cattura.c :
#include "Cattura.h"
..... Seguono le varie funzioni
.....
Cattura.h :
#ifndef Cattura
#define Cattura
#include <windows.h>
#include <vfw.h>
#include "Variabili_Globali.h"
/*-------------------------------------------------------------------------*
/
LRESULT CALLBACK VideoStreamCallback(HWND hCattura, LPVIDEOHDR lpVHdr);
...........
E cosě via con tutte le varie funzioni
........
.......
/*-------------------------------------------------------------------------*
/
#endif
Conversione_Colori.c :
#include "Conversione_Colori.h"
..... Seguono le varie funzioni
.....
Conversione__Colori.h :
#ifndef Conversione_Colori
#define Conversione_Colori
#include "Variabili_Globali.h"
/*-------------------------------------------------------------------------*
/
hsl RGBtoHSL (WORD rosso,WORD verde,WORD blu);
...........
E cosě via con tutte le varie funzioni
........
.......
/*-------------------------------------------------------------------------*
/
#endif

 Metto qualche linea di codice:
 > [snip]
sě, ma l'errore te lo dava su una variabile chiamata 'tracciare' 
(probabilmente) definita due volte, nel tuo codice non la vedo. Tra 
parentesi, il codice sembrerebbe giusto, a prima vista.


#ifndef Variabili_Globali
#define Variabili_Globali
#include <windows.h>
#include <stdio.h>
#define RIPOSO       0
......
...... E così via
.....
/**** DICHIARAZIONE VARIABILI ******/
tracciaPix *tracciare[2]={NULL,NULL};
WORD oggetto;
........
....... e così via
.......
#endif

 parentesi, il codice sembrerebbe giusto, a prima vista.
La variabile non č definita 2 volte, č il file Variabili_Globali.h che viene
incluso 2 volte, ma con la #ifndef ....
....
#endif
non dovrebbe essere inserito + di una volta no?

 #endif


 > #endif
Credo di aver capito: č l'inizializzazione della variabile che mi da dei
problemi, quindi se io la dichiaro solo senza inizializzarla dovrei
risolvere tutto.

 risolvere tutto.
non č l'inizializzazione in se, č la *definizione*! Cioč: scrivi 
extern!! >:-@
anche se non la inizializzassi, avresti problemi in ogni caso (provare 
per credere).


 per credere).
Ho provato: nel file Variabili_Globali ho inserito solo le dichiarazioni,
facendo l'inizzializzazione all'inizio del winmain e non mi da piů gli
errori quando va a linkare: compila tutto bene senza problemi.
Cosě evito di mettere tutte le varibili all'inizio dei moduli come extern e
mi č sufficiente fare una #include "Variabili_Globali.h" per averle tutte li
a disposizione.
Grazie comunque.