Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I cannot seem to get Visual C++ Express (2010) to recognize enum class

Tags:

c++

I am working to re-familiarize myself with C++ after using only Python for too long. I have written a small program with MS Visual C++ 2010 Express edition and I have looked all over the place for a culprit for why the compiler doesn't seem to like my usage of enum class Choice. The compiler complains that a namespace with this name does not exist. Now, I should say that all previous C/C++ code I have written was in an academic setting thus I was using the full IDE. Anyway, I am appending the code below and please forgive me if this is the incorrect method on which to post it. If it is please refer me to the correct method and I will employ it henceforth. Thank you, in advance, for any help or insight anyone might be able to lend. The code is as follows:

#include"stdafx.h"
#include<iostream>
#include<string>
#include<ctime>
using namespace std;

enum class Choice { rock, paper, scissors };
using namespace Choice;**

Choice player_choice;    //holds user's move
Choice machine_choice;   //holds machine's move

string words[3] = {"rock","paper","scissors"};

Choice get_machine_choice();
void decide_winner();
string get_msg(Choice winner);
int rand0toN1(int n);
int main(int argc, char *argv[])
{
    srand(time(NULL));    //set randomization
    string input_str;
    int c;
    while (true) {
        cout << "Enter Rock, Paper, Scissors, or Exit: ";
        getline(cin, input_str);
        if (input_str.size() < 1) {
            cout << "Sorry, I don't understand that.\n";
            continue;
        }
        c = input_str[0];
        if (c == 'R' || c == 'r')
            player_choice = rock;
        else if (c == 'P' || c == 'p')
            player_choice = paper;
        else if (c == 'S' || c == 's')
            player_choice = scissors;
        else if (c == 'E' || c == 'e')
            break;
        else {
            cout << "Sorry, I don't understand that.\n";
            continue;
        }
        machine_choice = get_machine_choice();
        int p = (int) player_choice;
        int c = (int) machine_choice;
        cout << "You Choose " << words [p];
        cout << "," << endl;
        cout << "I choose " << words [c];
        cout << "," << endl;
        decide_winner();
    }
    return EXIT_SUCCESS;
}

Choice get_machine_choice() {
    int n = rand0toN1(3);
    if (n == 0) return rock;
    if (n == 1) return paper;
    return scissors;
}

void decide_winner() {
    if (player_choice == machine_choice) {
        cout << "Reult is a tie.\n\n";
        return;
    }
    int p = static_cast<int>(player_choice);
    int c = static_cast<int>(machine_choice);
    if (p - c == 1 || p - c == -2) {
        cout << get_msg(player_choice);
        cout << "Unfortunantly, you win...\n";
    } else {
        cout << get_msg(machine_choice);
        cout << "I WIN, BEEEATCH!!!!\n";
    }
    cout << endl;
}

string get_msg(Choice winner) {
    if (winner == rock)
        return string("Rock smashes scissors, beeatch...");
    else if (winner == paper)
        return string("You know what paper does to rock, COVERAGE!!...");
    else
        return string("CHOP! Scissors cut paper!!....");
}

int rand0toN1(int n) {
    return rand() % n;
}

Thank you again for taking the time to help me out. I seem to remember declaring classes quite often using C++ and cannot figure out why it will not recognize it.

like image 556
court Avatar asked Dec 11 '22 14:12

court


2 Answers

VC++ doesn't support enum class in 2010. You need 2012.

like image 114
Adrian McCarthy Avatar answered Dec 14 '22 03:12

Adrian McCarthy


enum class wasn't supported in visual c++ 2010, I think it is in vc++ 2012 though. See here.

You'll have to upgrade your compiler or use plain "enum" which works slightly diferently of course.

like image 22
jcoder Avatar answered Dec 14 '22 04:12

jcoder