Estoy recibiendo el siguiente error en mi programa en C++:ningún constructor predeterminado adecuado disponible
1> c:\users\thom\documents\cworkspace\barnaby\barnaby\timezone.cpp(14) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled
Esto es un poco en la pila de errores, pero los puntos de esta línea de código:
static std::map<const std::string, Timezone> timezoneMap;
La razón es que Timezone tiene un constructor bastante elaborado, pero no tiene un constructor predeterminado. Aquí está la parte del error:
c:\program files\microsoft visual studio 10.0\vc\include\map(215): error C2512: 'Timezone::Timezone' : no appropriate default constructor available
1> c: \ archivos de programa \ Microsoft Visual Studio 10.0 \ VC \ include \ mapa (210): durante la compilación de la función miembro de plantilla de clase 'Zona horaria & std :: mapa < _Kty, _Ty> :: operador [] (const std :: basic_string < _Elem, _Traits, _Ax> &)'
Mi pregunta es, ¿por qué? ¿Por qué el mapa está tratando de construir un objeto Timezone? ¿Por qué debería ser necesario si siempre pongo objetos completamente formados en mi mapa? Especialmente, ¿por qué este error cuando inicializo el mapa?
+1 Cosas buenas. Tenga en cuenta que para 'std :: map' con 'explícito Foo :: Foo (int)' el único constructor y con el constructor de copia explícito, siempre puede decir 'm.insert (std :: make_pair (1, 5)); ', pero solo puede decir' m.insert (std :: make_pair (1, Foo (5))); 'en C++ 11. –