El error es que no se puede Inicialice un static const char*
dentro de la clase. Solo puedes inicializar las variables enteras allí.
tiene que declarar la variable miembro de la clase y, a continuación, inicializarlo fuera de la clase:
// encabezado del archivo
class Foo {
static const char *SOMETHING;
// rest of class
};
// CPP archivo
const char *Foo::SOMETHING = "sommething";
Si esto parece molesto, piense que es porque la inicialización solo puede aparecer en una unidad de traducción. Si estaba en la definición de la clase, eso generalmente estaría incluido en varios archivos. Los enteros constantes son un caso especial (lo que significa que el mensaje de error quizás no sea tan claro como podría serlo), y los compiladores pueden reemplazar efectivamente los usos de la variable con el valor entero.
Por el contrario, una variable char*
apunta a un objeto real en la memoria, que es necesario para realmente existir, y es la definición (incluida la inicialización) lo que hace que el objeto exista. La "regla de una definición" significa que, por lo tanto, no desea colocarla en un encabezado, porque entonces todas las unidades de traducción, incluido ese encabezado, contendrían la definición. No se pudieron vincular entre sí, aunque la cadena contiene los mismos caracteres en ambos, porque bajo las reglas actuales de C++ se han definido dos objetos diferentes con el mismo nombre, y eso no es legal. El hecho de que tengan los mismos personajes no lo hace legal.
debe usar "estática const char * const ALGO" en su lugar, a menos que realmente desea poder reasignar ALGO para señalar otra cosa en tiempo de ejecución. – bk1e