-5

クラスに次の列挙型宣言があります。

const enum METHODS{

    Write,
    Save,
    Update,
    Delete

};

しかし、列挙型の値を取得すると; -842150451すべてのメソッドでこの値を取得しました。

0,1,2,3 のはずですよね?

これを解決するのを手伝ってください。

列挙値を入れました map<LPCTSTR, long> m_methodMap

m_methodMap[_T("Save")] = Save; same with other methods

私はこの方法でそれを取得します:

cout << "Values " << m_methodMap.find(sMethodName)->second; // where sMethodName is the methods

4

3 に答える 3

5

std::map<LPCTSTR, long>ゴミです。は(または)LPCTSTRへの typedef です。つまり、マップは、ポインターに格納されている文字列ではなく、ポインターの値に基づいてキーを比較します。あなたはおそらく意味した。C++ で C データ構造を使用しないでください。char*wchar_t*std::map<std::basic_string<TCHAR>, METHODS>

于 2013-01-16T08:29:56.440 に答える
1

Angewが指摘したように、あなたはおそらく次のことを意味しています:std::map<std::basic_string<TCHAR>, METHODS>.そして、ここではCスタイルの文字列を使用しない方がよいでしょう。ただし、sMethodName がマップの作成に使用したポインターの 1 つを正確に保持している可能性があると確信している場合でも、実際にそれが見つかったかどうかをテストする必要がありfind(返さないでください.end())、使用するだけです->second

于 2013-01-16T08:49:18.337 に答える
1

そのため、マップは初期化されていない値を返します..列挙型とは関係ありません。

于 2013-01-16T08:24:57.510 に答える