2011-01-06 16 views
0

私はFormat()を使用する必要のあるプログラムを持っています。文字列リテラルとintをCString変数に結合する関数。私はこれを行うにはいくつかの異なる方法を試してみましたが、それらのコードはここにある:C++でタイプを変換する際のエラー

// 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 *、...)」を:パラメータ1を 'const char [33]'から 'const wchar_t *'に変換できません。

2番目の文字はエラーではありませんが、漢字で表示されます。

3つ目は、エラーC2440を返す: 'static_castを':* Sをwchar_tにCStringsを変換するための 'のwchar_t'

任意のアイデア 'へのconst char型[33]' から変換することはできませんか?
おかげ

+0

これはスーパーニツキですが、技術的に言えば、名前にアンダースコアと大文字の名前を付けることは想定されていません。これらの名前は、どのような使い方(恣意性の悪いマクロを含む)のための実装によって予約されています。ちょうど私がFYIとしてこれを言及したいと思った。 – templatetypedef

答えて

1

問題 は、あなたが(結構です)UNICODEビルドを実行しているので、

_CString.Format(); 

機能iがワイド文字列であることを最初のパラメータを期待していることです。もちろん

_CString.Format(L"text",_int); 

、あなたが実際のCStringにフォーマットint変数を取得するために指定をする必要があります:あなたはリテラルワイド文字列を形成するためにL""構文を使用する必要が

_CString.Format(L"text: %d",_int); 

tchar.hヘッダーを含める場合は、マイクロソフトのマクロを使用して、UNICODEを構築しているかどうかに応じて、文字列リテラルのワイド文字または通常の古い文字(別名ANSI)を作成できます。

_CString.Format(_T("text: %d)",_int); 

でも、ANSIサポートが必要な従来のものをサポートする予定がない限り、おそらくtchar.hのものは気にしません。

+0

ありがとう! L ""の構文が機能しました! –

2

まあ、それは私がやっているだろう、何をターゲットとしたいどのような文字列型完全には明らかではないのですが、ここにあります:

_CString.Format(_T("%d"), _int); 

がUnicodeにマルチバイト文字列をキャストタイプしようとすると、文字列がコンパイルされるかもしれませんが、それでもマルチバイト文字列であるため、問題を尋ねています。あなたが望むならば、文字列全体を変換するだけでなく、型変換する必要があります。

関連する問題