PDA

View Full Version : [C/C++] Modularizzazione e file header


Dawidh
07-01-2008, 12:01
Ciao a tutti, allora devo fare un progetto per scuola e in pratica devo modularizzare un unico file in cpp di 4000 righe di codice (e senza file .h) dividendolo in più file cpp e mettergli i relativi file h.

File .h
...
struct drive { // Drive su un canale ATA
bool presente;
bool dma;
unsigned int tot_sett;
partizione* part;
};
...
e fin qui tutto bene, anzi una cosa ma è giusto mettere le struct nei file h e soprattutto va bene scriverle cosi'?

Il problema mi si presenta con alcune struct:

// descrittore di swap
struct des_swap {
short channel; // canale: 0 = primario, 1 = secondario
short drive; // dispositivo: 0 = master, 1 = slave
partizione* part; // partizione all'interno del dispositivo
bm_t free; // bitmap dei blocchi liberi
superblock_t sb; // contenuto del superblocco
} swap; // c'e' un unico oggetto swap
in questo caso la struct des_swap ha già il nome swap e qunado compilo mi restituisce questo errore:

/home/davide/Os2/nucleo/sistema/libreria.cpp:20: multiple definition of `_swap'
sistema/sist_cpp.o:/home/davide/Os2/nucleo/sistema/sistema.cpp:81: first defined here


Ho anche provato a mettere la struct nel file c e dichiararla extern nel file h (tipo: extern struct swap;) ma niente.

Non essendo molto esperto chiedo aiuto a voi.. come posso risolvere?
Grazie!!!!!

Dawidh
07-01-2008, 13:51
Ehm, scusate ma ho già risolto..... bastava aprire e risalvare tutti i file del progetto e adesso funziona tutto!!
Scusate :p

cionci
07-01-2008, 13:56
Nel .h:

// descrittore di swap
struct des_swap {
short channel; // canale: 0 = primario, 1 = secondario
short drive; // dispositivo: 0 = master, 1 = slave
partizione* part; // partizione all'interno del dispositivo
bm_t free; // bitmap dei blocchi liberi
superblock_t sb; // contenuto del superblocco
};

Nel .cpp relativo:

struct des_swap swap;

Negli altri .cpp dove mi immagino si usi la variabile, suppongo, globale swap:

extern struct des_swap swap;

Ovviamente devi includere il .h.

Dawidh
07-01-2008, 15:59
Si infatti io avevo fatto come hai scritto tu però continuava a darmi quell'errore... prbabilemente perché compilo con un makefile (che tra l'altro non ho fatto io e quindi non conosco il funzionamento specifico) quindi dovevo ricompilare tutti i file per avere i file oggetto TUTTI giusti altrimenti alcuni mi rimanevano con la struct swap linkata e mi dava multiple definition.

cionci
07-01-2008, 16:01
Dawith...se devi rimettere mano al progetto guarda di togliere le variabili globali...sono una bestemmia in un linguaggio ad oggetti :D