PDA

View Full Version : Linkage in C/C++ dei file header


Allocchino
06-09-2004, 20:04
Questa è facile facile :)

Uso VC++7 ed ho questo problemino:
Ho questi 3 file:

main.cpp

#include "editor.h"
#include "impostaz.h"

...


editor.h

#ifndef _editor_h
#define _editor_h

#include "impostaz.h"


#endif


impostaz.h

#ifndef _impostaz_h
#define _impostaz_h

...

char tipo_di_rendering = 0;


int y_off[SCREEN_HEIGHT]; //offset precalcolati per la stampa del pixel

...

#endif



In fase di compilazione mi dice questo


main.obj : error LNK2005: "char tipo_di_rendering" (?tipo_di_rendering@@3DA) già definito in editor.obj
main.obj : error LNK2005: "int * y_off" (?y_off@@3PAHA) già definito in editor.obj
impostaz.obj : error LNK2005: "char tipo_di_rendering" (?tipo_di_rendering@@3DA) già definito in editor.obj
impostaz.obj : error LNK2005: "int * y_off" (?y_off@@3PAHA) già definito in editor.obj


Praticamente quel diamine di #ifndef non funziona e non mi esclude nella compilazione il file "impostaz.h" quando lo becca per la seconda volta.


Come mai? Sono sicuro che è una cavolata porc... :oink: :muro:

ilsensine
06-09-2004, 22:07
Uh oh il vc ti compila anche editor.obj e impostaz.obj...sicuro che non hai altri file oltre questi tre? ;) (tipo editor.cpp ecc)

In ogni caso, il tuo "errore" è instanziare un oggetto in un header: in un header gli oggetti andrebbero solo dichiarati (a meno di situazioni particolari, o oggetti static). Ad esempio dovresti _dichiarare_ in impostaz.h:

extern char tipo_di_rendering;

ed _instanziare_ fisicamente la variabile in un file .cpp a tua scelta.

Allocchino
07-09-2004, 13:11
Grazie tante! Appena torno a casa provo subito! :D