Cでの型変換エラー++
-
26-09-2019 - |
質問
私は(書式を使用する必要のあるプログラムを持っています)。 CStringの変数に文字列リテラルとint型を結合する機能。私はこれを行うにはいくつかの異なる方法を試してみましたが、それらのコードはここにあります:
// declare variables used
CString _CString;
int _int;
// try to use format function with string literal
_CString.Format("text",_int);
// try to use format function with C-Style cast
_CString.Format((wchar_t)"text",_int);
// try to use format function with static_cast
_CString.Format(static_cast<wchar_t>("text"),_int);
最初のものを返しますエラーC2664: '無効ATL :: CStringT ::フォーマット(定数はwchar_t *、...)': 'のconstのchar [33]' から 'のconst wchar_t型*' に1パラメータ変換することはできません。
秒の場合は、エラーがないが、テキストを漢字で表示されます。
第1リターンエラーC2440: 'static_castを': 'のconst char型[33]' と 'はwchar_t'
へ変換することができません wchar_tにCStringsを変換するための任意のアイデア* sの?
おかげ
解決
問題が
ですから、(結構です)UNICODEビルドを実行していることです_CString.Format();
私はワイド文字の文字列にするための最初のパラメータを期待して機能します。あなたはワイド文字列リテラルを形成するためにL""
構文を使用する必要があります:
_CString.Format(L"text",_int);
もちろん、あなたが実際のCStringにフォーマットint
変数を取得するために指定が必要になります。
_CString.Format(L"text: %d",_int);
あなたはtchar.h
ヘッダーが含まれている場合、は、あなたが作るために、Microsoftのマクロを使用することができます文字列リテラルワイド文字か(そうでない場合はANSIとして知られている)正規古い文字あなたがUNICODEかを構築しているかどうかに応じます:
_CString.Format(_T("text: %d)",_int);
私は言うだろう、あなたはANSIのサポートを必要とするだろうサポートレガシーものにしている計画、私はおそらくtchar.h
のものを気にしないだろう場合を除きます。
他のヒント
まあ、それはあなたがターゲットに欲しいものを文字列型の完全には明らかではないのですが、ここで私がやっているだろう何ます:
_CString.Format(_T("%d"), _int);
型にしようとすると、コンパイルしてUnicode文字列にマルチバイト文字列をキャストし、それはまだマルチバイト文字列だから、それはトラブルを求めています。それはあなたが欲しいものだ場合は、文字列全体だけでなく、それを型キャスト変換する必要があります。
mbstowcsは機能を試してみてください。 http://msdn.microsoft.com/en-私たち/ライブラリ/ ms235631(V = vs.80).aspxのの