2017-02-24 11 views
-1

enumクラスとstd :: stringを使ってstd :: mapを実行しようとしていますが、何らかのエラーが発生しています。 .cppファイルでどのようにstd :: map <enum class、std :: string>?

enum class state_t{ 
    unknown, 
    off, 
    on, 
    fault 
}; 

typedef std::map<state_t,std::string> statemap_t; 

:私は.hファイルで、(これが固定されている)-std = C++ 0xで

をGCC 4.4.7を使用しています

statemap_t state={ 
    {state_t::unknown,"unknown"} 
    {state_t::off,"off"} 
    {state_t::on,"on"} 
    {state_t::fault,"fault"} 
} 

Foo::allowStateChange(const state_t localState, const state_t globalState, const state_t newState){ 
    //Some code to verify if the state transition is allowed. 
    std::cout << "Device Local State:" << state.find(localState)->second << "Device Global State:" << state.find(globalState)->second << "Device New State:" << state.find(newState)->second << std::endl; 
} 

compillingとき、私は次のエラーを取得: エラー:私のような状態transitionisを許可する方法タイプ 'state_t'と 'state_t'の無効なオペランドをバイナリ 'operator <'

enum class state_tenum state_tに変更すると動作します。 enumクラスを使用してマップ内で検索する方法はありますか?

ありがとうございます。

+1

'<<'のスペルミスを '<'ですか? –

+0

いいえ、私はそれをチェックしました – user2357667

+0

ああ、この質問は 'cout'と全く関係がありません?マップを定義するだけですか? –

答えて

2

次のコードだけで正常に動作(Visual Studioの2015(V140)に、コンパイラがあなたのケースで使用されている?):

#include <string> 
#include <iostream> 
#include <map> 

using namespace std; 

enum class state_t { 
    unknown, 
    off, 
    on, 
    fault 
}; 

typedef std::map<state_t, std::string> statemap_t; 

statemap_t state = { 
    { state_t::unknown,"unknown" }, 
    { state_t::off,"off"}, 
    { state_t::on,"on"}, 
    { state_t::fault,"fault"} 
}; 

void allowStateChange(const state_t localState, const state_t globalState,  const state_t newState) { 
    //Some code to verify if the state transition is allowed. 
    std::cout 
     << "Device Local State:" 
     << state.find(localState)->second 
     << ", Device Global State:" 
     << state.find(globalState)->second 
     << ", Device New State:" 
     << state.find(newState)->second 
     << std::endl; 
} 

int main() 
{ 
    allowStateChange(state_t::on, state_t::off, state_t::fault); 
    return 0; 
} 

BWT、state_tでスペルを間違え "unkmown" があります。

+0

コード内です。スペルミスだけ、私はコードを貼り付けてコピーしなかった – user2357667

+0

私はgcc 4.4.7(RedHat 4.4.7-4)を使用しています。しかし、私はgccのバージョンを変更することはできません – user2357667

+0

gcc 4.4.7は、enumクラスのサポートのためにおそらくかなり古いです。あなたは単純な列挙型に戻らなければならないかもしれません。 – stefaanv

関連する問題