4

このコードを見てください:

#include <iostream>
using namespace std;
int main()
{

    enum object {s,k,g};
    object o,t;

    cout << "Player One: "; cin >> o;
    cout << "Player Two: "; cin >> t;

    if (o==s && t==g) cout << "The Winner is Player One.\n";
    else if (o==k && t==s) cout << "The Winner is Player One.\n";
    else if (o==g && t==k) cout << "The Winner is Player One.\n";
    else if (o==g && t==s) cout << "The Winner is Player Two.\n";
    else if (o==s && t==k) cout << "The Winner is Player Two.\n";
    else if (o==k && t==g) cout << "The Winner is Player Two.\n";
    else cout << "No One is the Winner.\n";
        return 0;
}

コンパイル中に次のエラーが発生no match for 'operator>>' in 'std::cin >> o します。コードブロックを使用しています。では、このコードの何が問題なのですか?

4

3 に答える 3

9

There is no operator>>() for enum. You can implement one yourself:

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

Of course, it would be easier if you just cin an integer and cast yourself. Just want to show you how to write an cin >> operator.

于 2012-04-29T11:21:59.973 に答える
4

「s」、「k」、または「g」を入力して、それらを列挙型に解析できると期待していますか? その場合は、次のように独自のストリーム オペレーターを定義する必要があります。

std::istream& operator>>(std::istream& is, object& obj) {
    std::string text;
    if (is >> text) {
        if (text == "s") {
            obj = s;
        }
        // TODO: else-if blocks for other values
        // TODO: else block to set the stream state to failed
    }
    return is;
}
于 2012-04-29T11:24:52.893 に答える