我在编译以下代码时遇到问题:
typedef std::map<mUUID, block_ptr_t> BlockMap;
BlockMap _store;
std::pair< BlockMap::iterator, bool > it;
it = _store.insert(hint, std::make_pair(entry.block_uid, block));
错误是:
error: no match for ‘operator=’ in ‘it = BlockStore::_store.std::map<_Key, _Tp, _Compare, _Alloc>::insert [with _Key = mUUID, _Tp = Block*, _Compare = std::less<mUUID>, _Alloc = std::allocator<std::pair<const mUUID, Block*> >](lb, ((const std::pair<const mUUID, Block*>&)(& std::pair<const mUUID, Block*>(((const std::pair<mUUID, Block*>&)((const std::pair<mUUID, Block*>*)(& std::make_pair(_T1, _T2) [with _T1 = mUUID, _T2 = Block*](block))))))))’
/usr/include/c++/4.4/bits/stl_pair.h:68: note: candidates are: std::pair<std::_Rb_tree_iterator<std::pair<const mUUID, Block*> >, bool>& std::pair<std::_Rb_tree_iterator<std::pair<const mUUID, Block*> >, bool>::operator=(const std::pair<std::_Rb_tree_iterator<std::pair<const mUUID, Block*> >, bool>&)
它似乎与赋值相关,因为如果我不将它赋给“it”,它就会编译而没有错误。
答案 0 :(得分:1)
获取提示的insert
版本仅返回迭代器,而不是一对。
答案 1 :(得分:0)
首先,您的示例不完整 - 无法定义_store。
其次,你似乎试图将一个迭代器分配给一个std ::对 - 为什么你还需要一对呢?
如果_store的类型为BlockMap,则以下内容应该有效:
BlockMap::iterator it;
it = _store.insert(std::make_pair(entry.block_uid, block));