3

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

我敢肯定,一旦有人指出显而易见的事情,事情就会变得简单。

4

1 回答 1

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

尝试在你的地图 typedef 前加上 std::

typedef std::map<string,int> layerType;

我怀疑它们可能是您代码中 std::__debug 泄漏的其他地方的一些命名空间泄漏......

于 2012-05-15T05:59:22.303 回答