Ошибка с 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
добавлено отредактировано
Просмотры: 2
nl ja de
обновленный с CString
добавлено автор jdl, источник
Что такое s ...?
добавлено автор K-ballo, источник
Это - вещь от MFC , правильно?
добавлено автор K-ballo, источник
Используйте (wchar_t) 0xb5
добавлено автор Hans Passant, источник

1 ответы

Обратите внимание, что VC ++ 6.0's модель компиляции по умолчанию - ANSI/MBCS (т.е. , TCHAR является случайной работой , , CString является последовательностью случайная работа , и т.д.), вместо этого 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(timebTime.time) +
    static_cast(timebTime.millitm)/1000.0);
s += L"RAMP,"; 
s += microSign;
s += L"m";

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

Кроме того, я сохранил бы строку формата (включая" ПАНДУС, µm " часть) в ресурсах приложений и загружать его оттуда вместо того, чтобы строить его в исходном коде.

2
добавлено