# Enumerator Help! [SOLVED]

This topic is 4287 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello. I was trying to complete an exercise at the end of chapter 2 of my c++ book, and i came across a problem i cannot figure out. The error says, "no math for 'operator >>' in 'std::cin >> myDiff'". I have no clue as to how to fix it, so maybe someone can help me out. Thanks for any help. Heres my code:
#include <iostream>
#include <windows.h>

int main()
{
enum difficulty {EASY = 1, NORMAL, HARD};
difficulty myDiff;

std::cout << "Welcome!\n\n"
<< "1 : Easy\n"
<< "2 : Normal\n"
<< "3 : Hard\n\n"
<< "Selection - ";
std::cin >> myDiff;

if(myDiff == 1)
{
std::cout << "\n\nDifficulty set to Easy\n\n";
}
if(myDiff == 2)
{
std::cout << "\n\nDifficulty set to Normal\n\n";
}
if(myDiff == 3)
{
std::cout << "\n\nDifficulty set to Hard\n\n";
}

//Waits till user terminates the program.
system("PAUSE");
return 0;
}


[Edited by - NUCLEAR RABBIT on April 29, 2006 5:41:59 PM]

##### Share on other sites
Quote:
 Original post by NUCLEAR RABBITHello. I was trying to complete an exercise at the end of chapter 2 of my c++ book, and i came across a problem i cannot figure out. The error says, "no math for 'operator >>' in 'std::cin >> myDiff'". I have no clue as to how to fix it, so maybe someone can help me out. Thanks for any help.Heres my code:*** Source Snippet Removed ***

Well I don't know how it goes in C++, but in my prefered language(C#), this line of code:

enum difficulty {EASY = 1, NORMAL, HARD};

Would make EASY, NORMAL, and HARD all equal to 1. Also, your enum can't(I think) be used as a variable like a struct or class. If it were me coding, this is what I would do:

#include <iostream>#include <windows.h> int main(){    enum difficulty {EASY = 1, NORMAL, HARD};    int choice;        std::cout << "Welcome!\n\n"              << "1 : Easy\n"              << "2 : Normal\n"              << "3 : Hard\n\n"              << "Selection - ";    std::cin >> choice;          if(choice == difficulty.EASY)    {        std::cout << "\n\nDifficulty set to Easy\n\n";    }    if(choice == difficulty.NORMAL)    {        std::cout << "\n\nDifficulty set to Normal\n\n";    }    if(choice == difficulty.HARD)    {        std::cout << "\n\nDifficulty set to Hard\n\n";    }        //Waits till user terminates the program.    system("PAUSE");    return 0;}

Also note that I would have used a switch block instead of three if statements, but I didn't want to deviate too much from your current code and end up confusing you. Hope that helps you out.

-AJ

##### Share on other sites
Just a guess:
try casting it to an int first.
std::cin >> (int) myDiff;

also this would be better:
    switch (myDiff)    {        case difficulty.EASY:            std::cout << "\n\nDifficulty set to Easy\n\n";            break;        case difficulty.NORMAL:            std::cout << "\n\nDifficulty set to Normal\n\n";            break;        case difficulty.HARD:            std::cout << "\n\nDifficulty set to Hard\n\n";            break;    }

Quote:
 enum difficulty {EASY = 1, NORMAL, HARD};Would make EASY, NORMAL, and HARD all equal to 1.

No, EASY is assigned value 1, and all other words that are not assigned a value explicitly, are assigned a value (1 + value of previous word)
So what i'm trying to say is that EASY=1, NORMAL=2 and HARD=3

##### Share on other sites
Quote:
 Original post by u235Well I don't know how it goes in C++, but in my prefered language(C#), this line of code:enum difficulty {EASY = 1, NORMAL, HARD};Would make EASY, NORMAL, and HARD all equal to 1.

Nope. It does make them 1, 2 and 3 respectively. In both languages.

##### Share on other sites
Thanks for all the help. I got it working. I didnt know you couldnt use the enumeraotrs like variables... :D

##### Share on other sites
Quote:
Original post by staaf
Quote:
 Original post by u235Well I don't know how it goes in C++, but in my prefered language(C#), this line of code:enum difficulty {EASY = 1, NORMAL, HARD};Would make EASY, NORMAL, and HARD all equal to 1.

Nope. It does make them 1, 2 and 3 respectively. In both languages.

My apologies. The way I it is the way I thought I read it in my C# reference. I just checked it though, and I do, indeed, stand corrected [smile].

-AJ

##### Share on other sites
Quote:
 Original post by NUCLEAR RABBITThanks for all the help. I got it working. I didnt know you couldnt use the enumeraotrs like variables... :D

You can, you just have to make sure that the functions and operators that you use it with support the enumator. If they don't exist, you write them yourself.