me encantaría ayuda a diagnosticar la fuente de un error de símbolo duplicado que estoy recibiendo cuando intento compilar con g ++ 4.2.1.error de símbolo duplicado asociado con const char * [] declaración
el error específico
ld: duplicate symbol _SOCIODEM_FILENAMES in /var/folders/c+/c+eq1Qz1Feye7vxs5mQOUE+++TI/-Tmp-//ccP3yVgF.o and /var/folders/c+/c+eq1Qz1Feye7vxs5mQOUE+++TI/-Tmp-//cc1NqtRL.o
collect2: ld returned 1 exit status
El error se produce sólo cuando incluyo esta declaración en un archivo llamado Parameters.h
:
// Parameters.h
#ifndef PARAMETERS_H
#define PARAMETERS_H
// ...[code snipped]...
const int NUM_SOCIODEM_FILES = 5;
const char * SOCIODEM_FILENAMES[ NUM_SOCIODEM_FILES ] = { "LSPAN_PDF.txt",
"FLEDGE_PDF.txt",
"PAIR_PDF.txt",
"BIRTH_AGE_PDF.txt",
"SPLIT_PDF.txt" };
// ...[code snipped]...
#endif
He buscado en todos mis archivos, y este es el único lugar donde se declara SOCIODEM_FILENAMES
. Cuando comento la declaración, el error del "símbolo duplicado" desaparece.
estoy familiarizado con errores de enlace (si eso es lo que es) y agradecería ayuda para solucionar el problema. Todos mis archivos de encabezado tienen envoltorios #ifndef...#define...#endif
. Mi comando de compilación es
g++ -o a.out -I /Applications/boost_1_42_0/ Host.cpp Simulation.cpp main.cpp Rdraws.cpp
Gracias de antemano.
Resumen Solución
ahora tengo en Parameters.h:
const char * const SOCIODEM_FILENAMES[ NUM_SOCIODEM_FILES ] = { "LSPAN_PDF.txt",
"FLEDGE_PDF.txt",
"PAIR_PDF.txt",
"BIRTH_AGE_PDF.txt",
"SPLIT_PDF.txt" };
Todas las demás definiciones y declaraciones en Parameters.h no se han modificado. Andrey y otros comentaristas resumen un enfoque alternativo usando extern
, que es excesivo para mis propósitos.
Genial. Sin embargo, todavía no entiendo por qué no declaras tu matriz 'SOCIODEM_FILENAMES' como' const'. ¿Se supone que las entradas de la matriz son modificables en tiempo de ejecución? – AnT
@Andrey: Debería declararlos como constantes. Gracias. – Sarah