sto imparando un po 'di roba teoria CSP (soddisfacimento di vincoli) in questo momento, e sto usando this libreria per analizzare i file XML. Sto usando Xcode come IDE.Duplica simbolo Linker Error (C++ aiuto)
Il mio programma si compila bene, ma quando va a collegare i file, ottengo un errore di simbolo duplicato con il file XMLParser_libxml2.hh. I miei file sono separati in quanto tali:
Un file di intestazione di classe che include il file XMLParser sopra
Un file di implementazione di classe che includono il file di intestazione di classe
Un file principale che include il file di intestazione di classe
Il duplicato il simbolo si sta verificando in main.o e classfile.o, ma per quanto posso dire, in realtà non sto aggiungendo il file .hh due volte.
errore completa:
ld: duplicate symbol bool CSPXMLParser::UTF8String::to<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >(std::basic_string<char,
std::char_traits<char>, std::allocator<char> >&) constin
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/dStructFill.o and
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/main.o`
Copiare l'implementazione della classe nel file principale e prendendo il file di implementazione della classe fuori del target di compilazione elimina l'errore, ma è un casino disorganizzato in questo modo, e io' Aggiungeremo più classi molto presto (e sarebbe bello averli in file separati).
Come ho capito, questo è causato dal file (XMLParser_libxml2.hh) che ha sia la definizione di classe e funzione e implementazione in un file (e sembra che questo potrebbe essere stato necessario a causa del uso di modelli in quel file 'header'). Qualche idea su come aggirare tutti i miei file di classe nel mio main.cpp? (Ho provato #ifdefs
, non funzionano).
Sono tutte le funzioni (tranne le funzioni membro definite all'interno di una definizione di classe o di modelli di funzione) nell'intestazione dichiarati 'inline'? –
avremmo bisogno di maggiori dettagli su come il tuo codice è strutturato e ho bisogno di sapere se le classi che generano gli errori dei simboli duplicati sono scritte da te o esistono già. Fondamentalmente, questo significa che stai provando a collegare il tuo codice due volte. Tuttavia sembra un problema che ho avuto una volta e questo è dovuto al modo in cui stavo costruendo la mia app, cioè stavo usando un mix di link statici e dinamici. Quindi assicurati di collegare tutto ciò che è statico o tutto ciò che è dinamico. Per avere un mix di entrambi è complicata e io non andare in quella –
@James Se la si sta facendo riferimento al file di intestazione che è stato fornito nel link, allora credo che tutte le funzioni sono funzioni membro di una classe. È un po 'difficile da dire dato che il codice è un pasticcio. Per quanto riguarda il mio codice personale, non ho funzioni che non siano funzioni membro. @Yan I file che generano gli errori sono in ultima analisi, creati da me. L'errore è venuto dall'includere l'intestazione XMLParser (non scritta da me) nel mio file di intestazione della classe, che a sua volta era incluso nei file di implementazione della funzione e della classe principale (che ho scritto e sono i file nominati nell'errore). – Vash265