Ok, soy nuevo en C++. Recibí el libro de Bjarne, y estoy tratando de seguir el código de la calculadora.C++ enum de char
Sin embargo, el compilador está escupiendo un error acerca de esta sección:
token_value get_token()
{
char ch;
do { // skip whitespace except '\n'
if(!std::cin.get(ch)) return curr_tok = END;
} while (ch!='\n' && isspace(ch));
switch (ch) {
case ';':
case '\n':
std::cin >> WS; // skip whitespace
return curr_tok=PRINT;
case '*':
case '/':
case '+':
case '-':
case '(':
case ')':
case '=':
return curr_tok=ch;
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9': case '.':
std::cin.putback(ch);
std::cin >> number_value;
return curr_tok=NUMBER;
default: // NAME, NAME=, or error
if (isalpha(ch)) {
char* p = name_string;
*p++ = ch;
while (std::cin.get(ch) && isalnum(ch)) *p++ = ch;
std::cin.putback(ch);
*p = 0;
return curr_tok=NAME;
}
error("bad token");
return curr_tok=PRINT;
}
El error está escupiendo es la siguiente:
calc.cpp:42: error: invalid conversion from ‘char’ to ‘token_value’
token_value
es una enumeración que se parece a:
enum token_value {
NAME, NUMBER, END,
PLUS='+', MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=')'
};
token_value curr_tok;
Mi pregunta es, ¿cómo convierto ch (de cin), a la enumeración asociada valor?
Prefiere usar moldes de nuevo estilo (es decir, 'static_cast', etc.) cuando usas C++ en lugar de C. – ChrisW
O si quieres usar moldes de estilo C, espárdelos bajo el radar usando la sintaxis del constructor:' curr_tok = token_value (ch) '. El autor de su guía de estilo puede pensar dos veces antes de prohibir los constructores de argumento único, aunque solo puedan invocarse con un molde de estilo C. ;-) –