cin >> operand无法使用枚举

use*_*704 2 c++ enums cin operands

这是我为练习做的代码.当我编译它时,它不允许cin >> choice被编译.它说" 错误2错误C2088:'>>':类非法 "和" 错误1错误C2371:'选择':重新定义;不同的基本类型 "我能就如何解决这个问题得到一些建议吗?非常感激!

#include <iostream>

using namespace std;

int main()
{
    cout << "Difficulty levels\n\n";
    cout << "Easy - 0\n";
    cout << "Normal - 1\n";
    cout << "Hard - 2\n";

    enum options { Easy, Normal, Hard, Undecided };
    options choice = Undecided;
    cout << "Your choice: ";
    int choice;
    cin >> choice;

    switch (choice)
    {
    case 0:
        cout << "You picked Easy.\n";
        break;
    case 1:
        cout << "You picked Normal. \n";
        break;
    case 2:
        cout << "You picked Hard. \n";
        break;
    default:
        cout << "You made an illegal choice.\n";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

lpa*_*app 6

它说"错误2错误C2088:'>>':类非法"和"错误1错误C2371:'选择':重新定义;不同的基本类型"我能就如何解决这个问题得到一些建议吗?

当然,让我们看看你写的是什么:

...
options choice = Undecided;
// ^^^^^^^^^^^
cout << "Your choice: ";
int choice;
// ^^^^^^^^
cin >> choice;
..
Run Code Online (Sandbox Code Playgroud)

这是个错误.首先,您应该只定义一次相同的变量.其次,枚举器没有运算符>>重载,所以你不能使用前一个声明.

解决方案是删除前者,所以你将整体编写(修复丑陋的缩进):

main.cpp中

#include <iostream>

using namespace std;

int main()
{
    enum options { Easy, Normal, Hard, Undecided };
    cout << "Difficulty levels\n\n";
    cout << "Easy - " << Easy << "\n";
    cout << "Normal - " << Normal << "\n";
    cout << "Hard - " << Hard << "\n";
    cout << "Your choice: ";
    int choice;
    cin >> choice;

    switch (choice)
    {
    case Easy:
        cout << "You picked Easy.\n";
        break;
    case Normal:
        cout << "You picked Normal.\n";
        break;
    case Hard:
        cout << "You picked Hard.\n";
        break;
    default:
        cout << "You made an illegal choice.\n";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

g++ main.cpp && ./a.out 
Difficulty levels

Easy - 0
Normal - 1
Hard - 2
Your choice: 0
You picked Easy.
Run Code Online (Sandbox Code Playgroud)