没有合适的默认构造函数

时间:2011-11-04 17:31:13

标签: c++ visual-c++ stl

我的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&GT; c:\ program files \ microsoft visual studio 10.0 \ vc \ include \ map(210):同时编译类模板成员函数'Timezone&amp; std :: map&lt; _Kty,_Ty&gt; :: operator [](const std :: basic_string&lt ; _Elem,_Traits,_Ax&gt;&amp;)'

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

2 个答案:

答案 0 :(得分:16)

您可能正在使用 需要默认构造函数的map operator[](如果没有,那么它将如何处理密钥的情况)在地图中不存在?)。如果您使用insert代替可能能够逃脱而不提供一个(我不记得标准是否需要所有地图的默认构造函数,或者只是在您使用时操作者)。

答案 1 :(得分:1)

当你使用[]访问结构时,map对象需要一个默认的构造函数(我之前的解释是如此令人费解,以至于没有意义 - 抱歉)。请参阅:Why does the C++ map type argument require an empty constructor when using []?