Ошибка с CString при импорте в VC ++ 2005?

Я написал код на VC ++ 6.0 и импортировал его в VC ++ 2005.
Я получаю неоднозначную ошибку при вставке Unicode сейчас?

CString s;

s.Format("%f\r\n", (double)timebTime.time + (double)timebTime.millitm / 1000);
s+="RAMP,";
s+=0x00b5;  // <-- Error: VC++(2005):  "error C2593: 'operator +=' is ambiguous"s+="m";

1

Решение

Обратите внимание, что моделью компиляции по умолчанию в VC ++ 6.0 является ANSI / MBCS (т.е. TCHAR это char, CString это последовательность charи т. д.), вместо этого модель компиляции по умолчанию VC ++ 2005 Unicode (Т.е. TCHAR является wchar_t, CString на самом деле CStringWто есть wchar_t строка).

Я бы просто использовал модель Unicode (не беспокойтесь о совместимости с ANSI / MBCS и TCHAR, _T("...")и т. д.) и скорректируйте код следующим образом:

static const wchar_t microSign = 0x00B5;

CString s;
s.Format(L"%f\r\n",
static_cast<double>(timebTime.time) +
static_cast<double>(timebTime.millitm) / 1000.0);
s += L"RAMP,";
s += microSign;
s += L"m";

Обратите внимание, что использование именованной константы (например, microSign) делает код более читабельным, чем «магическое число» лайк 0x00B5,

Более того, я бы сохранил строку формата (включая «RAMP,µm«часть) в ресурсах приложения и загрузите его оттуда вместо создания его в исходном коде.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]