1

私は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";
4

1 に答える 1

2

VC++6.0のデフォルトのコンパイルモデルはANSI/MBCS(つまり、TCHARは、のシーケンスなど)であることに注意してください。代わりに、VC ++ 2005のデフォルトのコンパイルモデルはUnicodeです(つまり、は、実際には、です。文字列)。charCStringcharTCHARwchar_tCStringCStringWwchar_t

TCHARUnicodeモデルを使用し(ANSI / MBCSの互換性や、などを気にしないで_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"の部分を含む)をアプリリソースに保存し、ソースコードでビルドするのではなく、そこからロードします。

于 2013-01-09T16:00:18.117 に答える