0

私は次のことをしようとしています:

class sig
{
    CComboBox objList;
    void SetDefault();
}
void sig :: SetDefault()
{
    objList.InsertString(0, METHOD_ONE);
}

別のクラスでMETHOD_ONEを次のように定義しました

#define METHOD_ONE "OFF"

そして、上記のエラーが発生します。

誰か助けてくれませんか?

乾杯、

チンタン

4

1 に答える 1

3

最も重要な部分は、エラーを理解することです。が何であるかを知っています。const char [4]簡単な部分ですが、 はどうLPCTSTRですか?

Microsoftのドキュメントによると:

LPCWSTRUNICODE が定義されている場合、そうLPCSTRでない場合。詳細については、「文字列の Windows データ型」を参照してください。

そして、次のLPCWSTRとおりです。

16 ビット Unicode 文字の null で終わる定数文字列へのポインター。詳細については、フォントで使用される文字セットを参照してください。

まず、プログラムを使用しているエンコーディングのタイプを確認する必要があります。を使用しているように見えるので、最終的にs への const ポインター (「OFF」定数) を へのUNICODEconst ポインターに変換しようとしていますが、(論理的に) 変換は許可されていません。charwchar_t

次に、正しい文字列タイプを選択できます。UNICODE が定義されている場合は、#defineワイド文字列にする必要があります。

// Note the L
#define METHOD_ONE L"OFF"

次のように定義することもできます。

#ifdef UNICODE
#define METHOD_ONE L"OFF"
#else
#define METHOD_ONE "OFF"
#endif

または_T、Roman R によって提案されたマクロを使用します。このマクロが行うのはL、テキストにプレフィックスを追加することだけです。

#ifdef UNICODE
#define _T(x) L ##x
#else
#define _T(x) x
#endif

最後に、使用している文字列の種類を認識しておく必要があります。#defineしかし、Microsoft はとのあいまいなチェーンを使用してそれを隠していますtypedef

于 2012-09-12T08:36:07.007 に答える