我在我的C收到以下錯誤++程序:沒有合適的默認構造函數可用
1> c:\users\thom\documents\cworkspace\barnaby\barnaby\timezone.cpp(14) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled
這是倒在錯誤堆棧,但指向此行的代碼位:
static std::map<const std::string, Timezone> timezoneMap;
原因是Timezone有一個相當複雜的構造函數,但沒有默認的構造函數。這裏的誤差的那部分:
c:\program files\microsoft visual studio 10.0\vc\include\map(215): error C2512: 'Timezone::Timezone' : no appropriate default constructor available
1> C:\程序Files \ Microsoft的Visual Studio 10.0 \ VC \包括\地圖(210):在編譯類模板的成員函數「時區&的std ::地圖< _Kty,_Ty> :: operator [](const std :: basic_string < _Elem,_Traits,_Ax> &)'
我的問題是,爲什麼?爲什麼地圖試圖構造一個Timezone對象?如果我總是將完全形成的物體放入我的地圖,爲什麼還需要它?特別是,當我初始化地圖時爲什麼會出現這個錯誤?
+1好東西。請注意,對於'顯式Foo :: Foo(int)'唯一的構造函數和顯式拷貝構造函數,'std :: map',您總是可以說'm.insert(std :: make_pair(1,5)); ',但你只能在C++ 11中說'm.insert(std :: make_pair(1,Foo(5)));'。 –