Проблема компиляции вставки карты STL - PullRequest
1 голос
/ 30 марта 2011

У меня проблемы с компиляцией следующего кода:

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>&)

Похоже, это связано с назначением, потому что, если я не назначу его для "оно", оно компилируется без ошибок.

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Версия insert, которая принимает подсказку, возвращает только итератор, а не пару.

0 голосов
/ 30 марта 2011

Прежде всего, ваш пример неполон - _store не определен нигде.

Во-вторых, кажется, вы пытаетесь назначить итератор для std :: pair - зачем вам вообще нужна пара?

Должно работать следующее при условии, что _store имеет тип BlockMap:
BlockMap::iterator it;<br> it = _store.insert(std::make_pair(entry.block_uid, block));

...