Получил & ldquo; Доступ запрещен & rdquo; когда я пытался установить 64-битный mongodb в Windows Server 2008

На самом деле стандарт C ++ (т. е. C ++ 0x draft ) говорит (tnx to @Xeo & amp; @Ben Voigt для указания этого на меня):

23.2 .4 Ассоциативные контейнеры 5 Для set и multiset тип значения совпадает с типом ключа. Для карты и мультимапа он равен паре. Ключи в ассоциативном контейнере неизменяемы. 6 итератор ассоциативного контейнера относится к категории двунаправленного итератора. Для ассоциативных контейнеров, где тип значения совпадает с типом ключа, оба итератора и const_iterator являются постоянными итераторами. Не указано, является ли итератор и const_iterator одним и тем же типом.

blockquote>

Итак, реализация Dinkumware VC ++ 2008 ошибочна.


Старый ответ:

Вы получили эту ошибку, потому что в некоторых реализациях std lib set::iterator совпадает с set::const_iterator.

Например, libstdc ++ (поставляется с g ++) имеет его (см. здесь для всего исходного кода):

typedef typename _Rep_type::const_iterator            iterator;
typedef typename _Rep_type::const_iterator            const_iterator;

И в SGI docs указывает:

iterator       Container  Iterator used to iterate through a set.
const_iterator Container  Const iterator used to iterate through a set. (Iterator and const_iterator are the same type.)

С другой стороны, VC ++ 2008 Express компилирует ваш код, не жалуясь, что вы вызываете методы non const на set::iterator s.

13
задан Yi Jiang 10 November 2010 в 13:28
поделиться