| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > map и WCHAR[] |
| Автор: qweasd 14.2.2008, 16:28 | ||||
Я делаю вот так:
Выдает такой вот еррор:
как это исправить и заставить правильно работать??? |
| Автор: Daevaorn 14.2.2008, 16:35 |
| Если уже используете STL, то используйте до конца. Т.е. для строк std::wstring. Тогда не будет проблем с контейнерами. |
| Автор: qweasd 14.2.2008, 17:04 |
| Это да!!! Так понятно, и тут никаких проблем не возникает!!! Но хотелось бы заполнять WCHAR'ом. |
| Автор: Lazin 14.2.2008, 17:13 |
| у массивов нет конструктора по умолчанию, вместо него используй указатели, или создай структуру содержащую массив и напиши для нее конструктор... счастливой отладки)) |
| Автор: qweasd 14.2.2008, 17:34 |
| Мдаа. Это уж точно счастливой отладки))) Лучше уж я потом буду вытягивать CString'и и переводить их в WCHAR. Что скажете??? |
| Автор: Alek86 14.2.2008, 17:57 |
вот уж велосипед... ничего не напоминает? ;) и помойму со массивами чаров в шаблонах были проблемы из-за того, что у них внутренняя привязка, чтоли. и решались они весьма извращенными способами... так что лучше уж std::wstring Добавлено через 2 минуты и 45 секунд лучше всего пользоваться однородными инструментами если пользуешь MFC, то у него и карты свои были, вроде (вектора точно) |
| Автор: qweasd 15.2.2008, 10:57 | ||
В конце концов решил сделать вот так:
|
| Автор: Daevaorn 15.2.2008, 11:14 |
Свечку в церкви поставить не забудь;) |
| Автор: Alek86 15.2.2008, 11:23 |
| qweasd, ужос, чесно слово пока не поздно. поменяй на wstring не поменяешь - сам потом материться буш (на себя) |
| Автор: qweasd 15.2.2008, 11:29 |
| а чё? Вроде все норм работет! |
| Автор: Alek86 15.2.2008, 11:38 |
| тогда закрывай тему поживешь-увидишь |
| Автор: qweasd 15.2.2008, 11:52 |
| Хороший ответ! А главное содержательный Я так понимаю вы намекаете на утечку памяти? |
| Автор: qweasd 15.2.2008, 12:13 |
| Ну допустим тут я могу использовать стандартные классы! А как тогда быть если нужно создавать вектор или мап своими руками написаных класов??? |
| Автор: Mayk 15.2.2008, 12:33 | ||||||
при попытке перезаписи может не хорошо кончится. пример раз.
и вот тут возможны варианты: 1) m_vBrowsers.back().p1[1] == 'W' в том случае если компилятор захотел и склеил две L"qwe" в одну, дабы не занимать память. [ не йа придумал http://elias.rhi.hi.is/gcc/gcc_13.html] и положил их в область памяти, доступную для записи 2) SIGSEGV, если положил в область памяти куда записывать низзя 3) ожидаемое p1[1] == 'w', p2[1] == 'W'. пример два
foo завершается, локальный массив рушится к чертям. что в m_vBrowsers --- нипаняятна (с) но ой как навряд ли то что нам нужно Пример три
ой! какой-то умник положил массив на 4 wchar'а, а обращается к [9]-ому. и мы черт-а с два узнаем что к [9]-ому обращаццо низзя sigsegv здесь лучший вариант. все эти три обходятся std::wstring'ом. |
| Автор: qweasd 15.2.2008, 12:45 |
| Большое спасибо! Буду набиратся опыта |
| Автор: Alek86 15.2.2008, 13:53 |
| Mayk, насчет примера 2 - не уверен. почему это строчки будут удаляться после выхода из блока? ЗЫ. не очень хорошо в этом разбираюсь, так что, если нетрудно, ссылкой со стандарта или статьей (еслит отвечать кто-то будет вообще |
| Автор: Daevaorn 15.2.2008, 13:58 | ||
Не строки, а массив. Он то на стеке |
| Автор: Alek86 15.2.2008, 14:07 | ||
| Daevaorn, но указатель будет показывать на строку? или
может копировать строку? |
| Автор: Daevaorn 15.2.2008, 14:09 |
| Это не указатель, а массив. Массив инициализуется строкой, т.е. она в него копируется. |
| Автор: Alek86 15.2.2008, 14:09 | ||
| а, хотя понял ведь массив менять можно, значит будет копировать Добавлено через 38 секунд кстати, а вот так?
|
| Автор: Fazil6 15.2.2008, 14:13 | ||
что так? определение
всегда копирование в массив и от константности ничего не зависит |
| Автор: Daevaorn 15.2.2008, 14:13 |
Что вот так? Это ничего не изменит |
| Автор: Alek86 15.2.2008, 14:13 |
| верю странно, правда. почему бы не сэкономить память? |
| Автор: qweasd 18.2.2008, 10:57 |
| Дабы не множить посты задам вопрос тут(на туже тему): Например мне надо заполнять,а потом считывать, изменять список элементов. Элементом является структура состоящая из поля типа строки, 2х полей int, и одного поля bool. Вопрос в чем все это дело хранить??? vector?? B как описать даную структуру??? Создавать клас? Каким требованиям должна отвечать структура(клас)? |
| Автор: Alek86 18.2.2008, 11:27 |
помойму ты сам ответил на свой вопрос - вектор структур (лучше классов) как обычно - требованиям ООП |
| Автор: Lazin 18.2.2008, 11:36 |
| Зависит от того как потом такой список будет использоваться. Вектор не подойдет если: - часто добавляются и удаляются элементы, в этом случае возможны частые перераспределения памяти. - где-то хранятся итераторы на элементы в списке, после добавления элемента в вектор, в приличных домах, принято считать все итераторы недействительными. она должна иметь конструктор по умолчанию и конструктор копирования |
| Автор: qweasd 18.2.2008, 11:46 |
| А что подойдет? |
| Автор: Alek86 18.2.2008, 12:09 |
| std::list |