2012-04-29 7 views
2

ルックを受け入れることはできません「のstd :: cinを>> O」で「演算子>>」の一致を 私はコードブロックを使用しています。だからこのコードで何が間違っていますか?列挙型は、CINコマンドにこのコードプラザトン

+1

ここで探してみてください。 http://stackoverflow.com/questions/9220599/error-no-match-for-operator-in -stdcin-stopat いくつかの洞察を提供する必要があります。 –

答えて

4

enumの演算子>>()はありません。

std::istream& operator>>(std::istream& is, object& i) 
{ 
    int tmp ; 
    if (is >> tmp) 
     i = static_cast<object>(tmp) ; 
    return is ; 
} 

整数をシンクして自分自身をキャストすれば、もちろん簡単です。 cin >>演算子を書く方法を見せたいだけです。

2

"s"、 "k"、または "g"と入力して列挙型に解析できると思われますか?もしそうなら、あなたはこのように、あなた自身のストリーム演算子を定義する必要があります。

std::istream& operator>>(std::istream& is, object& obj) { 
    std::string text; 
    if (is >> text) { 
     if (is == "s") { 
      obj = s; 
     } 
     // TODO: else-if blocks for other values 
     // TODO: else block to set the stream state to failed 
    } 
    return is; 
} 
+1

単なる文字であれば、より簡単なコードを読むために 'char' +' switch'があります。それ以外の場合は、 'unordered_map 'です。 –

+1

私はスイッチのことに同意しますが、入力が長さ1であることのチェックで私の答えを複雑にしたくありませんでした。しかし、それは効率的なデータ構造ではないので、unordered_mapの使用に同意しません。値。より多くのデータ駆動型が必要な場合は、std :: pairsの配列を提案し、ちょうどいくつかの要素がある場合は、std :: findを使用して線形検索を行います。そこからバイナリ検索に簡単に移動したり、数千人のプレイヤーがいつでもハッシュテーブルを構築することも簡単です。 :) –

+1

時間の97%、効率的なことを心配しないでください;) 'unordered_map'は、キーによるルックアップのための自然なインターフェースを提供するので、そのままで動作します。効率を上げるためには、コンストラクタを避け、PODから配列を構築して静的初期化中に完全に初期化を行い、 'malloc' /' new'呼び出しを必要としないようにする必要があります。少しの報酬。 KISSは 'unordered_map'や' map'と言っています。 –