STL嵌套容器解除引用错误

时间:2012-05-15 05:37:14

标签: c++ stl compiler-errors

我的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> > >'

我确信一旦有人指出显而易见的事情,这将是一件简单的事情。

1 个答案:

答案 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被泄露....