我的C ++生气了,我曾经拥有过的STL知识。我特别努力阅读生成的大量错误消息。
假设:
typedef map<string,int>layerType;
typedef vector<layerType> aggregateLayersType;
出了什么问题:
bool LayerManager::use_layers(aggregateLayersType& layers)
{
int layerVal = layers[0]["ts"];
}
错误是:
> No viable overloaded operator[] for type
> 'std::__debug::map<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, int, std::less<std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >,
> std::allocator<std::pair<const std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >, int> > >'
我确信一旦有人指出显而易见的事情,这将是一件简单的事情。
答案 0 :(得分:4)
看起来你正在使用std :: map类的调试版本(std :: __ debug :: map):http://gcc.gnu.org/onlinedocs/gcc-4.6.3/libstdc++/api/a00298.html
根据文档缺少重载的operator[]
。
它出现在发布版本中:http://gcc.gnu.org/onlinedocs/gcc-4.6.3/libstdc++/api/a00601.html
尝试使用std ::
为地图typedef添加前缀 typedef std::map<string,int> layerType;
我怀疑他们可能是你的代码中其他地方的命名空间泄漏,其中std :: __ debug被泄露....