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 に答える