2011-07-05 12 views
1
CString szMsg; 

//Other non related code 

//stOrderInfo.bstrOrderNum is defined as a _bstr_t 
szMsg += ", Order: " + stOrderInfo.bstrOrderNum; 

私はVS2k10にVS 6.0から上記変換していると私は、次のエラーを取得していますあいまいです(VS 6.0でコンパイルされます):まさにこれを何のVisual C++演算子+ =は

error C2593: 'operator +=' is ambiguous 

を私はそれを修正することができますか?

答えて

2

"をハードコードしたので、" "コンパイラはどのタイプを決定するのが難しいですか?

明白なタイプはCStringである必要がありますが、他の文字列タイプに変更して数字を追加しようとする可能性があります。

だからおそらくそれがCStringか別の文字列型かどうかは判断できません。したがって、どのタイプをszMsgに追加するかは決めることができません。文字列型の間

szMsg += (CString)(", Order: ") + (CString)((char *)(stOrderInfo.bstrOrderNum)); 

出演:CString::operator+=の実装は、例えばVisual Studioの2010年に変更されていることが知られている

How to: Convert Between Various String Types

+0

私はこれを行い、最後にCStringと_bstr_t(stOrderInfo.bstrOrderNum)を最後に連結することについて不平を言います。エラーC2666: 'ATL :: CStringT :: operator +':3オーバーロードのコンバージョンが似ています –

+0

ここであいまいな型キャストが発生しています。解決策:明示的な型キャスト他のものもキャストしてください。 –

+0

私もそれを試みましたが、コンパイラはそれをキャストできません。エラーC2440: '型キャスト': '_bstr_t'から 'CString'に変換できません –

2

これは、コンパイラがBSTR + char連結に使用する+演算を選択できないことを意味します。 CString、_bstr_t、charの3種類の不一致があります。 3つのオペランドをすべて単一の型に統一しようとします。

+0

私はこれを避けることを望んでいましたが、私は選択肢がないかもしれません。ありがとう。 –

0

あなただけのタイプキャストを使用することができます以前のバージョンでは埋め込まれたヌル文字を処理しました。ちょうどoperator+がやっているように、新しいバージョンはありません。それはこれに関連するかもしれません。このトピックに関する議論に

EDIT
リンク:
http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/c5d7f383-da80-4776-b9b8-a6065839bd87

0

より良い使用CString::AppendFormat。ただし、正しい書式指定子を渡すようにしてください。