Oppure

Loading
01/11/10 12:44
Giarados
Vorrei dividere un mio progetto in moduli. Soprattutto vorrei organizzarlo in questo modo:

negli headers prototipo le funzioni "utilities" e definisco le classi
nei source *.cpp / *.c implemento i metodi delle classi e le funzioni utilities

Poi compilo uno per uno i sorgenti ottenendo gli object files.

Il problema è che quando, in fine, linko il tutto, giustamente, ottengo una sfilza di "multiple definition of...". Normalmente includendo 6 volte la stdio.h gli spetta di diritto al linker insultarmi a modo suo. Ma se non includo l' header.h in un modulo quando vado per compilare naturalmente gcc mi risponde con una ventina di "undefined reference to".
Ultima modifica effettuata da Giarados 01/11/10 12:45
aaa
01/11/10 13:06
netarrow
all'inizio del tuo header devi usare delle direttive di preprocessore in questo modo:

#ifndef ETICHETTA_A_TUA_SCELTA
#define ETICHETTA_A_TUA_SCELTA

// codice dell'header

#endif


Così l'header verrà importato solo una volta.
aaa
01/11/10 14:29
Giarados
il problema continua a persistere solo per due variabili contenute in OFIELD.h .

Ho messo all'inizio di ogni source che include quest'header il seguente codice:

#ifndef OFIELD
#  include "include/OFIELD.h"
#endif


e in OFIELD.h :
#ifndef OFIELD
#  define OFIELD
#endif


però non funge..mi segnala sempre che quelle 2 variabili vengono dichiarate due volte..
Ultima modifica effettuata da Giarados 01/11/10 14:29
aaa
01/11/10 15:14
Postato originariamente da Giarados:

il problema continua a persistere solo per due variabili contenute in OFIELD.h .

Ho messo all'inizio di ogni source che include quest'header il seguente codice:

#ifndef OFIELD
#  include "include/OFIELD.h"
#endif


e in OFIELD.h :
#ifndef OFIELD
#  define OFIELD
#endif


però non funge..mi segnala sempre che quelle 2 variabili vengono dichiarate due volte..


dichiarale extern nei file .h e in quelli .cpp fai la dichiarazione vera e propria :k:
01/11/10 15:46
Giarados
Ci avevo pensato anch'io ma non avevo provato perchè mi sembra un poco "elegante". Comunque per il momento va bene :) ancora c'è tanto lavoro da fare e non posso di certo perdermi per due variabili. Però continuo a non capire perchè facendo come dice netarrow non funge. In fin dei conti è come se l'inclusione viene fatta una sola volta. Boh...
aaa
01/11/10 21:13
netarrow
Le direttive di preprocessore non vanno usate per wrappare l'include, ma proprio dentro il file header.
Cioè il contenuto del file OFIELD.h lo fai stare in mezzo a quel codice.
aaa