Tengo un problema con la inicialización del miembro 'static const'. En una clase con plantilla, defino un miembro const y lo inicializo fuera de la clase.
Cuando incluyo el archivo .h donde esta clase se implementa en varios archivos .cpp, recibo un error LNK2005 (estoy usando VS2010) que dice que la constante ya está definida.Inicialización del elemento estático estático en la clase de plantilla
// List.hpp
template <class T>
class List {
static const double TRIM_THRESHOLD;
};
template <class T>
const double List<T>::TRIM_THRESHOLD = 0.8;
He intentado poner la inicialización miembro en un archivo .cpp, pero cuando me siento un error de vinculador diciendo que la constante no se define en absoluto. Si la lista no está modelada y pongo la inicialización en un archivo .cpp, todo está bien.
¿Hay alguna solución para esta situación? Ya tengo # ifdef/define cláusulas alrededor del archivo, y definitivamente no es una solución.
Falta el modificador 'const' en la definición. – Ropez
¿Estás seguro de que este es tu código? No deberías obtener ningún error. @Ropez: el 'const' solo importa en la declaración. – GManNickG
Curiosamente, VS2015 no tiene este problema. De alguna manera puede optimizar/descubrir que las definiciones estáticas const son realmente todas las mismas cosas y no marca un error en el enlazador. – Menace