error de símbolo duplicado C ++

He agregado un poco de carácter const en mi archivo como debajo. El error que recibo es el símbolo duplicado _xyz (decir). ¿Cuál es el problema y cómo podría salir de esto?

const char* xyz = "xyz"; class Abc { public: Abc() { } }; 

Si está en un archivo de encabezado, está definiendo xyz cada vez que #include .

Puedes cambiar la statement como muestra @R Samuel Klatchko. La forma habitual (si los datos no son const ) es así:

En Abc.h:

 extern char *xyz; 

En Abc.cpp:

 char *xyz = "xyz"; 

Editado para agregar

Tenga en cuenta que los protectores de encabezado no resolverán este problema:

 #ifndef XYZ_H #define XYZ_H ... #endif 

Las protecciones de encabezado evitan los errores de “redefinición”, donde el mismo símbolo aparece dos veces en la misma unidad de comstackción. Eso es un error de comstackdor .

Pero incluso con protectores de encabezado, la definición de xyz seguirá apareciendo en cada archivo fuente que lo incluya, lo que provocará un error de “símbolo duplicado”, que es un error de enlazador .

Hubiera sido más útil si el cartel original hubiera mencionado eso, por supuesto.

El problema es que cada archivo fuente que incluye su archivo de cabecera obtiene su propia copia de xyz con enlaces externos.

La forma más fácil de solucionar eso es dar un enlace interno xyz . Puedes hacer eso haciendo que el puntero sea const además de tener la const const subyacente:

 const char* const xyz = "xyz"; 

Por favor, brinde una descripción significativa del problema. ¿Cuál es “mi archivo”? ¿Qué “personaje const” estás tomando?

Por lo que proporcionó hasta ahora, solo puedo adivinar que agregó la definición anterior de xyz a un archivo de encabezado y luego la incluyó en varias unidades de traducción. El resultado: el objeto xyz se definió más de una vez. De ahí el error.