好吧,我是C++新手。我收到了Bjarne的書,我試圖按照計算器代碼。來自char的C++枚舉
然而,編譯器吐出一個錯誤關於本節:
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;
}
它吐出的錯誤是這樣的:
calc.cpp:42: error: invalid conversion from ‘char’ to ‘token_value’
token_value
是一個枚舉,看起來像:
enum token_value {
NAME, NUMBER, END,
PLUS='+', MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=')'
};
token_value curr_tok;
我的問題是,如何將ch(從cin)轉換爲關聯的枚舉價值?
當使用C++而不是C時,喜歡使用新樣式類型(即'static_cast'等)。 – ChrisW 2009-08-19 01:35:05
或者如果您確實想使用C樣式類型,使用構造函數語法將它們潛入雷達下:'curr_tok = token_value(ch)'。在禁止單參數構造函數之前,您的風格指南的作者可能會考慮三次,即使它們只能使用C風格強制轉換才能調用。 ;-) – 2009-08-19 10:59:20