没有合适的默认构造函数

Tho*_*hom 12 c++ stl visual-c++

我的C++程序中出现以下错误:

1>          c:\users\thom\documents\cworkspace\barnaby\barnaby\timezone.cpp(14) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled
Run Code Online (Sandbox Code Playgroud)

这在错误堆栈中有点下降,但指向这行代码:

static std::map<const std::string, Timezone>    timezoneMap;
Run Code Online (Sandbox Code Playgroud)

原因是Timezone有一个相当复杂的构造函数,但没有默认的构造函数.这是错误的一部分:

c:\program files\microsoft visual studio 10.0\vc\include\map(215): error C2512: 'Timezone::Timezone' : no appropriate default constructor available
Run Code Online (Sandbox Code Playgroud)

1> c:\ program files\microsoft visual studio 10.0\vc\include\map(210):同时编译类模板成员函数'Timezone&std :: map <_Kty,_Ty> :: operator [](const std :: basic_string <_Elem,_Traits,_Ax>&)'

我的问题是,为什么?为什么地图试图构造时区对象?如果我总是将完全成形的物体放入我的地图中,为什么还需要呢?特别是,当我初始化地图时为什么会出现这个错误?

Mar*_*k B 17

你可能使用mapoperator[]确实需要默认的构造函数(如果没有,会是怎样处理这种情况的关键并不在地图上存在的情况?).如果您使用的insert,而不是你可能能够逃脱不提供一个(如果该标准要求所有的地图默认的构造函数我不记得,或者只是当您使用的运营商).