PDA

Visualizza la versione completa : [C++] Errore "Multiple definition" a causa di variabili esterne


Epris
12-03-2011, 18:31
Ciao a tutti,

sto provando ad integrare il codice C scritto da diverse persone in una dll da richiamare con Java tramite JNI.
Sto utilizzando NetBeans con CygWin e Gcc.

Ho una serie di errori di questo tipo


build/Debug/Cygwin-Windows/BPLEARN.o: In function `_Z11genera_pesiv':
/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPLEARN.cpp:145: multiple definition of `_Input'
build/Debug/Cygwin-Windows/BPCLASS.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCLASS.cpp:249: first defined here
build/Debug/Cygwin-Windows/BPLEARN.o: In function `_Z13apprendimentoiiiP2fvi':
/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPLEARN.cpp:798: multiple definition of `_IH'
build/Debug/Cygwin-Windows/BPCLASS.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCLASS.cpp:108: first defined here
build/Debug/Cygwin-Windows/BPLEARN.o: In function `_Z13apprendimentoiiiP2fvi':
/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPLEARN.cpp:798: multiple definition of `_HO'
build/Debug/Cygwin-Windows/BPCLASS.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCLASS.cpp:249: first defined here

/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BP_LIBWB.cpp:37: multiple definition of `print_error(int, char*)'
build/Debug/Cygwin-Windows/Mischia.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/Mischia.cpp:39: first defined here
build/Debug/Cygwin-Windows/BP_LIBWB.o: In function `_Z11carica_pesiPc':
/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BP_LIBWB.cpp:64: multiple definition of `carica_pesi(char*)'
build/Debug/Cygwin-Windows/BPCL_LIB.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCL_LIB.cpp:62: first defined here


Per quanto riguarda gli errori sulle variabili HO, IH mi sono accorto che BPCLASS.cpp e BPLEARN.cpp definiscono le stesse variabili e in BP_LIBWB viene fatto dichiarando extern. Pensavo di eliminare la dicitura "extern" ma non posso perchè ad esempio la dichiarazione di IH è extern double IH[][MAX_HIDDEN];
Se tolgo extern mi da errore perché la prima dimensione non è definita.
Come posso fare???

Poi ci sono gli errori sulla definizione multipla di funzione tra le classi BPCL_LIB.cpp BP_LIBWB.cpp e Mischia.cpp. I prototipi delle funzioni che "collidono" sono definiti rispettivamente in BPCL_LIB.h BP_LIBWB.h e nel prepocessore di Mischia.cpp e i file header non si richiamano a vicenda, ne Mischia.cpp ha gli include dei due header.
Suggerimenti?

Grazie a tutti

Epris
12-03-2011, 21:04
aggiungo una cosa:

ho risolto il problema sulle funzioni cancellando i doppioni.. ora resta quello sulle variabili.
La cosa sta cosi:
1)BPCL_LIB.cpp : contiene la definizione delle variabili di tipo extern
2)BPCLASS.cpp e BPLEARN.cpp inizializzano entrambe le variabili extern

Da qui l'errore..
Come posso fare?
Avevo probato con un namespace: nessun errore ma output errato.
In realtà BPCLASS e BPLEARN.cpp non vengono mai usate insieme... o una o l'altra

Xadoom
15-03-2011, 09:12
Puoi provare a creare un header .h con la definizione delle variabili ed includerlo in entrambi i file.
:ciauz: :ciauz:

Loading