Это единственное, о чем я могу думать. Вещь разумно.Struct Not Accepting wchar_t
У меня есть на структуру следующим образом:
struct NumPair
{
wchar_t *pFirst, *pSecond;
int count;
с CTOR, скопировать назначение и конструкцию, как
NumPair(wchar_t *pfirst, wchar_t *psecond, int count = 0)
NumPair(const NumPair& np)
NumPair& operator=(const NumPair& np)
Это является продолжением моей последней задачи, в которой я просил на пути к сортировать список указателей символов с ними, содержащих специальные (немецкие) символы, такие как ü, ä, ö
.
Решение похоже использует широкие типы символов, но по какой-либо причине компилятор перебрасывает более сотни ошибок преобразования.
ввода пробы:
// dict_ is a container of NumPairs.
dict_.push_back(NumPair ("anfangen", "to begin, to start"));
Компилятор жалуется, что он не может преобразовать const char *
в wchar_t
. Достаточно Хорошо, я изменю push_back сказать
dict_.push_back(NumPair (wchar_t("anfangen"), wchar_t("to begin, to start")));
Compiler ошибку: Не удается найти NumPair CTOR, который принимает все аргументы.
Что. . Ад. Я попробовал полную перестройку, думая, что мой VSC++ 10 работает. Нет, не надо.
Что я делаю неправильно?
КОД
т е р, назначение и скопировать конструкцию все глубокие копии wchar_t указателей, как показано ниже.
wchar.h входит.
NumPair(wchar_t *pfirst, wchar_t *psecond, int count = 0)
: count(count)
{
size_t s1, s2;
s1 = wcslen(pfirst);
s2 = wcslen(psecond);
pFirst = new wchar_t[s1];
pSecond = new wchar_t[s2];
wcscpy(pFirst, pfirst);
wcscpy(pSecond, psecond);
}
Вам не удалось, когда вы пытались управлять несколькими ресурсами за раз, а именно строкой. Мы уже решили эту проблему, это 'std :: wstring'. – GManNickG
Вам нужно добавить еще один символ для нулевого терминатора, а также обработать уничтожение. Технически ваш код также не является безопасным для исключений, если второй новый не удается, поскольку первый из них никогда не будет удален (деструктор не будет вызываться). Лучше всего использовать std :: wstring. – CashCow