error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion) c:\program files\microsoft visual studio 10.0\vc\include\utility
Читая MSDN и форумы, я не понял как обойти эту проблему, подскажите пожалуйста.
T>>Читая MSDN и форумы, я не понял как обойти эту проблему, подскажите пожалуйста.
D>ключ (строку) в итераторе мэпа нельзя менять -- меняя ключ ты можешь нарушить порядок. Поэтому ключ константный.
Вместо этого можно удалить старый элемент и добавить новый. Но для выполнения этой операции итераторов не достаточно, нужен доступ к контейнеру.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, MasterZiv, Вы писали:
MZ>On 10.04.2011 3:17, Towelie wrote: >> Здравствуйте, я передаю итераторы начала и конца std::map в класс и в нем >> изменяю некоторые значения, но:
MZ>Очень зря ты так делаешь.
А как тогда лучше всего хранить настройки в программе? Я видел похожую проблему там посоветовали boost::multi_array, есть еще что нибудь попроще и по удобнее?
T>error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion) c:\program files\microsoft visual studio 10.0\vc\include\utility
T>
T>Читая MSDN и форумы, я не понял как обойти эту проблему, подскажите пожалуйста.
Здравствуйте, Towelie, Вы писали:
>>> Здравствуйте, я передаю итераторы начала и конца std::map в класс и в нем >>> изменяю некоторые значения, но:
MZ>>Очень зря ты так делаешь.
T>А как тогда лучше всего хранить настройки в программе? Я видел похожую проблему там посоветовали boost::multi_array, есть еще что нибудь попроще и по удобнее?
Предполагаю, что boost::multi_array тебе предложили потому, что ты точно так же, как и здесь не сформулировал толком задачу. Если хочешь получить помощь, расскажи внятно: дано то-то, то-то, надо сделать то-то, то-то.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, blonduser, Вы писали:
B>Здравствуйте, Towelie, Вы писали:
T>>Здравствуйте, я передаю итераторы начала и конца std::map в класс и в нем изменяю некоторые значения, но:
T>>
T>>error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion) c:\program files\microsoft visual studio 10.0\vc\include\utility
T>>
T>error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion) c:\program files\microsoft visual studio 10.0\vc\include\utility
T>
T>Читая MSDN и форумы, я не понял как обойти эту проблему, подскажите пожалуйста.
Но в чем проблема-то? Приведенный фрагмент (псевдокода) пытается сделать что-то не очень понятное: что здесь i, Text и Edit?
Что здесь первично, а что строится? На входе пары ключ-значение, и надо построить map? Или задан map, и надо его модифицировать?
Вот когда это станет ясно, тогда и проблема исчезнет сама собой.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Towelie, Вы писали:
>>>> Здравствуйте, я передаю итераторы начала и конца std::map в класс и в нем >>>> изменяю некоторые значения, но:
MZ>>>Очень зря ты так делаешь.
T>>А как тогда лучше всего хранить настройки в программе? Я видел похожую проблему там посоветовали boost::multi_array, есть еще что нибудь попроще и по удобнее?
R>Предполагаю, что boost::multi_array тебе предложили потому, что ты точно так же, как и здесь не сформулировал толком задачу. Если хочешь получить помощь, расскажи внятно: дано то-то, то-то, надо сделать то-то, то-то.
Есть xml файл настроек, он парсится при загрузке и из него ключи добавляются в std::map, потом мне нужно изменить эти настройки и применить уже измененные.
Здравствуйте, Towelie, Вы писали:
T>Есть xml файл настроек, он парсится при загрузке и из него ключи добавляются в std::map, потом мне нужно изменить эти настройки и применить уже измененные.
Ну так это обычное штатное использование std::map:
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Towelie, Вы писали:
T>>Есть xml файл настроек, он парсится при загрузке и из него ключи добавляются в std::map, потом мне нужно изменить эти настройки и применить уже измененные.
R>Ну так это обычное штатное использование std::map:
R>
Доплнение. Изменение значений можно делать не только с доступом по ключу, но и через итераторы. Например, если на (зачем-то) требуется все значения настроек взять в одиночные кавычки это можно сделать так:
Тебе нужно понять одну простую вещь: каждый элемент контейнера типа std::map состоит из двух частей: ключ и значение. Можно изменить значение элемента контейнера, но ключ изменить нельзя.
--
Справедливость выше закона. А человечность выше справедливости.
T>Есть xml файл настроек, он парсится при загрузке и из него ключи добавляются в std::map, потом мне нужно изменить эти настройки и применить уже измененные.
Лучше сразу смотреть в сторону boost::property_tree
On 10.04.2011 12:55, Towelie wrote:
> MZ>Очень зря ты так делаешь. > > А как тогда лучше всего хранить настройки в программе? Я видел похожую проблему > там посоветовали boost::multi_array, есть еще что нибудь попроще и по удобнее?
Храни как хочешь, только если тебе нужно что-то с элементом мапы делать, делай
erase, а затем insert. Если и можно что-то менять, то это ТОЛЬКО значение, НЕ
КЛЮЧ ни в коем случае.
On 10.04.2011 19:57, inofa wrote:
> Лучше сразу смотреть в сторону boost::property_tree
(видимо, имелся в виду property_map)
может быть лучше boost::program_options ?
Здравствуйте, MasterZiv, Вы писали:
MZ>On 10.04.2011 19:57, inofa wrote:
>> Лучше сразу смотреть в сторону boost::property_tree MZ>(видимо, имелся в виду property_map) MZ>может быть лучше boost::program_options ?
Что-то мне подсказывает, что товарищу Towelie еще рано буст юзать.
Лучше std::map.