Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[35.173.48.18] |
|
Сообщ.
#1
,
|
|
|
Имеется код
std::wstring strarg1 = args->args[0]; std::wstring strarg2 = args->args[1]; std::wstring strresult = strarg1 + strarg2; int i = strresult.length(); При попытке присваивания переменым strarg1,strarg2 значений получаю ошибкуE0415 не существует подходящего конструктора для преобразования из "char *" в "std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>" Probamysqludf H:\studyprojects\MySqlLib\MySQLPRoba1\Probamysqlud f\dllmain.cpp 46 Как мне изменить код чтобы он скомпилировался? |
Сообщ.
#2
,
|
|
|
Преобразование из char в wchar_t не стандартизовано, т.к. зависит от национальных предпочтений пользователя, а не формальных правил языка программирования. Как и в случае WinAPI, тебе следует самому определить правила преобразования, на основе std::locale, например.
Добавлено В качестве быстрого старта могу предложить что-то типа: /* Преобразование UNICODE в ANSI с учётом локали. Параметры: str - исходная UNICODE-строка; ct - фасет std::ctype<wchar_t> из требуемой локали; для русской локали должен браться из std::locale("russian"). Возвращает результирующую ANSI-строку str. */ std::string toNarrow(const std::wstring& str, const std::ctype<wchar_t>& ct = std::use_facet<std::ctype<wchar_t> >(std::locale::classic())) { std::vector<char> buf(str.length()); if (!buf.empty()) ct.narrow(str.data(), str.data()+buf.size(), '\a', &buf[0]); return std::string(buf.begin(), buf.end()); } /* Преобразование ANSI в UNICODE с учётом локали. Параметры: str - исходная ANSI-строка; ct - фасет std::ctype<wchar_t> из требуемой локали; для русской локали должен браться из std::locale("russian"). Возвращает результирующую UNICODE-строку str. */ std::wstring toWide(const std::string& str, const std::ctype<wchar_t>& ct = std::use_facet<std::ctype<wchar_t> >(std::locale::classic())) { std::vector<wchar_t> buf(str.length()); if (!buf.empty()) ct.widen(str.data(), str.data()+buf.size(), &buf[0]); return std::wstring(buf.begin(), buf.end()); } const std::locale loc ("rus"); // под виндой этого хватит, в линухе другие имена локалей, что-то типа "ru_RU.UTF8" const std::ctype<wchar_t>& ct = std::use_facet<std::ctype<wchar_t> >(loc); /* ... */ std::wstring strarg1 = toWide(args->args[0], ct); std::cout << toNarrow(L"Первый параметр " + strarg1, ct); |