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.
VC++ doesn't support enum class in 2010. You need 2012.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With