Dostaję następujący błąd w moim C++ Program:Nie odpowiedni konstruktor dostępny domyślny
1> c:\users\thom\documents\cworkspace\barnaby\barnaby\timezone.cpp(14) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled
Jest nieco w dół w stosie błąd, ale punktów do tego wiersza kodu:
static std::map<const std::string, Timezone> timezoneMap;
Powód jest taki, że strefa czasowa ma raczej skomplikowany konstruktor, ale nie ma domyślnego konstruktora. Oto, że część błędu:
c:\program files\microsoft visual studio 10.0\vc\include\map(215): error C2512: 'Timezone::Timezone' : no appropriate default constructor available
1> c: \ program files \ Microsoft visual studio 10.0 \ VC \ include \ mapę (210): podczas kompilowania funkcji składowej klasy szablonu „Strefa czasowa & std :: map < _Kty, _Ty> :: operator [] (const std :: basic_string < _Elem, _Traits, _Ax> &) '
Moje pytanie brzmi: dlaczego? Dlaczego mapa próbuje zbudować obiekt strefy czasowej? Dlaczego miałby on również potrzebować, gdybym zawsze umieszczał w mojej mapie w pełni uformowane obiekty? W szczególności, dlaczego ten błąd podczas inicjowania mapy?
+1 Dobre rzeczy. Zauważ, że dla 'std :: map' z 'explicit Foo :: Foo (int)' jedynym konstruktorem i jawnym konstruktorem kopiowania możesz zawsze powiedzieć 'zastępcaownik (std :: make_pair (1, 5)); ', ale możesz tylko powiedzieć' zastępowalnie (std :: make_pair (1, Foo (5)); 'w C++ 11. –