Si esto es en un fichero de cabecera, que está definiendo xyz
cada vez que se #include
.
Puede cambiar la declaración como @R Samuel Klatchko muestra. La forma habitual (si los datos no son const
) es la siguiente:
En Abc.h:
extern char *xyz;
En Abc.cpp:
char *xyz = "xyz";
Editado para agregar
Tenga en cuenta que los protectores de encabezado no resuelven este problema:
#ifndef XYZ_H
#define XYZ_H
...
#endif
Los protectores de encabezado evitan los errores de "redefinición", donde el mismo símbolo aparece dos veces en la misma unidad de compilación. Es un error del compilador .
Pero incluso con cabecera guarda la definición de xyz
seguirá apareciendo en cada archivo de origen que lo incluye, causando un error de "símbolo duplicado", que es un error de enlazador.
Habría sido más útil si el cartel original lo hubiera mencionado, por supuesto.
declarar una variable en múltiples ocasiones no es un error (si no es dentro de la misma unidad de traducción). Definirlo es –
Debería haber atrapado eso, gracias. – egrunin
Gracias por la aclaración del protector de la cabecera. Sin embargo, aquí hay algo extraño: solo obtengo el error del enlazador para los símbolos duplicados si tengo una función definida en ese encabezado. En mi caso actual, tengo un montón de constantes y un par de funciones definidas en un espacio de nombres dentro de un encabezado. Solo recibo un error de enlazador para las funciones, las de const son correctas. ¿Porqué es eso? –