Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> map и WCHAR[], как заполнять map<WCHAR[10],WCHAR[255]> 
V
    Опции темы
qweasd
Дата 14.2.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Я делаю вот так: 


Код

#include <map>

......
typedef pair <WCHAR[10], WCHAR[255]> WCHARPair;

....

map <WCHAR[10], WCHAR[255]> m_mapBrowsersW;

....

WCHAR p1[10]=L"qwe", p2[255]=L"sdf";
m_mapBrowsersW.insert(WCHARPair(p1,p2));

.....


Выдает такой вот еррор:

Код

1>c:\program files\microsoft visual studio 8\vc\include\utility(37) : error C2536: 'std::pair<_Ty1,_Ty2>::std::pair<_Ty1,_Ty2>::first' : cannot specify explicit initializer for arrays
1>        with
1>        [
1>            _Ty1=WCHAR [10],
1>            _Ty2=WCHAR [255]
1>        ]
1>        c:\program files\microsoft visual studio 8\vc\include\utility(53) : see declaration of 'std::pair<_Ty1,_Ty2>::first'
1>        with
1>        [
1>            _Ty1=WCHAR [10],
1>            _Ty2=WCHAR [255]
1>        ]
1>        c:\program files\microsoft visual studio 8\vc\include\utility(35) : while compiling class template member function 'std::pair<_Ty1,_Ty2>::pair(const _Ty1 (&),const _Ty2 (&))'
1>        with
1>        [
1>            _Ty1=WCHAR [10],
1>            _Ty2=WCHAR [255]
1>        ]
1>        e:\programming\wowqwestermfc\wowqwestermfcdlg.cpp(180) : see reference to class template instantiation 'std::pair<_Ty1,_Ty2>' being compiled
1>        with
1>        [
1>            _Ty1=WCHAR [10],
1>            _Ty2=WCHAR [255]
1>        ]
1>c:\program files\microsoft visual studio 8\vc\include\utility(37) : error C2536: 'std::pair<_Ty1,_Ty2>::std::pair<_Ty1,_Ty2>::second' : cannot specify explicit initializer for arrays
1>        with
1>        [
1>            _Ty1=WCHAR [10],
1>            _Ty2=WCHAR [255]
1>        ]
1>        c:\program files\microsoft visual studio 8\vc\include\utility(54) : see declaration of 'std::pair<_Ty1,_Ty2>::second'
1>        with
1>        [
1>            _Ty1=WCHAR [10],
1>            _Ty2=WCHAR [255]
1>        ]


как это исправить и заставить правильно работать???

Это сообщение отредактировал(а) qweasd - 14.2.2008, 16:31
PM MAIL   Вверх
Daevaorn
Дата 14.2.2008, 16:35 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Если уже используете STL, то используйте до конца. Т.е. для строк std::wstring. Тогда не будет проблем с контейнерами.
PM MAIL WWW   Вверх
qweasd
Дата 14.2.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Это да!!! Так понятно, и тут никаких проблем не возникает!!!
Но хотелось бы заполнять WCHAR'ом.
PM MAIL   Вверх
Lazin
Дата 14.2.2008, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



у массивов нет конструктора по умолчанию, вместо него используй указатели, или создай структуру содержащую массив и напиши для нее конструктор...
Цитата(qweasd @  14.2.2008,  17:04 Найти цитируемый пост)
Но хотелось бы заполнять WCHAR'ом. 

счастливой отладки))
PM MAIL Skype GTalk   Вверх
qweasd
Дата 14.2.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Мдаа. Это уж точно счастливой отладки)))
Лучше уж я потом буду вытягивать CString'и и переводить их в WCHAR.
Что скажете???



Это сообщение отредактировал(а) qweasd - 14.2.2008, 17:36
PM MAIL   Вверх
Alek86
Дата 14.2.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Lazin @  14.2.2008,  17:13 Найти цитируемый пост)
содержащую массив и напиши для нее конструктор...


вот уж велосипед... ничего не напоминает? ;)


и помойму со массивами чаров в шаблонах были проблемы из-за того, что у них внутренняя привязка, чтоли. и решались они весьма извращенными способами... так что лучше уж std::wstring

Добавлено через 2 минуты и 45 секунд
Цитата(qweasd @  14.2.2008,  17:34 Найти цитируемый пост)
Что скажете???

лучше всего пользоваться однородными инструментами

если пользуешь MFC, то у него и карты свои были, вроде (вектора точно)


--------------------
user posted image    user posted image
PM MAIL   Вверх
qweasd
Дата 15.2.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



В конце концов решил сделать вот так:

Код

........

struct strWCHARPoints
{
    strWCHARPoints(WCHAR* in_p1, WCHAR* in_p2)
    {
        p1 = in_p1;
        p2 = in_p2;
    }
    WCHAR* p1;
    WCHAR* p2;
};

.........

    vector<strWCHARPoints> m_vBrowsers;

.........

        m_vBrowsers.push_back(strWCHARPoints(L"qwe",L"qwe"));

........



PM MAIL   Вверх
Daevaorn
Дата 15.2.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(qweasd @  15.2.2008,  11:57 Найти цитируемый пост)
В конце концов решил сделать вот так:

Свечку в церкви поставить не забудь;)

Это сообщение отредактировал(а) Daevaorn - 15.2.2008, 12:46
PM MAIL WWW   Вверх
Alek86
Дата 15.2.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



qweasd, ужос, чесно слово

пока не поздно. поменяй на wstring
не поменяешь - сам потом материться буш (на себя)


--------------------
user posted image    user posted image
PM MAIL   Вверх
qweasd
Дата 15.2.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



а чё? Вроде все норм работет!

Это сообщение отредактировал(а) qweasd - 15.2.2008, 11:31
PM MAIL   Вверх
Alek86
Дата 15.2.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



тогда закрывай тему
поживешь-увидишь


--------------------
user posted image    user posted image
PM MAIL   Вверх
qweasd
Дата 15.2.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Хороший ответ! А главное содержательный  smile 
Я так понимаю вы намекаете на утечку памяти?

Это сообщение отредактировал(а) qweasd - 15.2.2008, 12:00
PM MAIL   Вверх
qweasd
Дата 15.2.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Ну допустим тут я могу использовать стандартные классы!
А как тогда быть если нужно создавать вектор или мап своими руками написаных класов???
PM MAIL   Вверх
Mayk
Дата 15.2.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(qweasd @  15.2.2008,  15:29 Найти цитируемый пост)
а чё? Вроде все норм работет!

при попытке перезаписи может не хорошо кончится. 
пример раз.
Цитата

        m_vBrowsers.push_back(strWCHARPoints(L"qwe",L"qwe"));
        m_vBrowsers.back().p2[1]='W';

и вот тут возможны варианты:
1) m_vBrowsers.back().p1[1] == 'W'
в том случае если компилятор захотел и склеил две L"qwe" в одну, дабы не занимать память. [ не йа придумал -fmerge-constants] и положил их в область памяти, доступную для записи
2) SIGSEGV, если положил в область памяти куда записывать низзя
3) ожидаемое p1[1] == 'w', p2[1]  == 'W'.

пример два
Цитата

void foo(){
      wchar_t text[]=L"hello";
      m_vBrowsers.push_back(strWCHARPoints(L"e",text));
      return ;
}

foo завершается, локальный массив рушится к чертям. что в m_vBrowsers --- нипаняятна (с) но ой как навряд ли то что нам нужно

Пример три
Код

wchar_t arr[4];
m_vBrowsers.push_back(strWCHARPoints(L"e",arr));
wchar_t* x = m_vBrowsers.back().p2;
x[9]  = 0;  

ой! какой-то умник положил массив на 4 wchar'а, а обращается к [9]-ому.  и мы черт-а с два узнаем что к [9]-ому  обращаццо низзя
sigsegv здесь лучший вариант.

все эти три обходятся std::wstring'ом.

Это сообщение отредактировал(а) Mayk - 15.2.2008, 12:36


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
qweasd
  Дата 15.2.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Большое спасибо! smile 
Буду набиратся опыта smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.