2011-12-17 8 views
1

文字列でいっぱいのマップをキーと整数として値として作成しようとしています。問題は私がそれを試して検索するときに始まります。誰かが私がどこに間違って行ったか教えてくれますか私は同じ声明で2つのマップを持っていますか?STLマップが検索時にエラーを投げる

invale is "ale" 
    roomno = 2; 
    // roomlist is a map 
    // rinventory is another map 

    if(roomlist[roomno].rinventory.find(invale) != map<string, int>::end()); 

エラーが発生します。何が関数のオーバーロードですか?それは本当に長いエラーです。

error C2668: 'std::_Tree<_Traits>::end' : ambiguous call to overloaded function 
1>  with 
1>  [ 
1>   _Traits=std::_Tmap_traits<std::string,int,std::less<std::string>,std::allocator<std::pair<const std::string,int>>,false> 
1>  ] 
1>  c:\program files\microsoft visual studio 9.0\vc\include\xtree(569): could be 'std::_Tree<_Traits>::const_iterator std::_Tree<_Traits>::end(void) const' 
1>  with 
1>  [ 
1>   _Traits=std::_Tmap_traits<std::string,int,std::less<std::string>,std::allocator<std::pair<const std::string,int>>,false> 
1>  ] 
1>  c:\program files\microsoft visual studio 9.0\vc\include\xtree(564): or  'std::_Tree<_Traits>::iterator std::_Tree<_Traits>::end(void)' 
1>  with 
1>  [ 
1>   _Traits=std::_Tmap_traits<std::string,int,std::less<std::string>,std::allocator<std::pair<const std::string,int>>,false> 
1>  ] 
1>  while trying to match the argument list '(void)'  

ありがとうございます。

答えて

3

にそれを変更してみてください:

if(roomlist[roomno].rinventory.find(invale) != roomlist[roomno].rinventory.end()); 
+0

はあなたの助けをありがとう –

0

それは

if(roomlist[roomno].rinventory.find(invale) != roomlist[roomno].rinventory.end()); 
0

map::end()メソッドは静的ではありませんする必要があります。

適切な方法は、このようなものです:

map<string, int>::iterator it = roomlist[roomno].rinventory.find(invale); 
if(it != roomlist[roomno].rinventory.end()) 
    // do stuff 
関連する問題