Ok, tôi mới ở C++. Tôi nhận được cuốn sách của Bjarne, và tôi đang cố gắng làm theo mã máy tính.C++ enum từ char
Tuy nhiên, trình biên dịch được phun ra một lỗi về phần này:
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;
}
Các lỗi nó phun ra là thế này:
calc.cpp:42: error: invalid conversion from ‘char’ to ‘token_value’
token_value
là một enum mà trông giống như:
enum token_value {
NAME, NUMBER, END,
PLUS='+', MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=')'
};
token_value curr_tok;
Câu hỏi của tôi là, làm cách nào để chuyển đổi ch (từ cin) sang enum được liên kết giá trị?
Ưu tiên sử dụng phôi kiểu mới (ví dụ 'static_cast', v.v.) khi sử dụng C++ thay vì C. – ChrisW
Hoặc nếu bạn muốn sử dụng phôi kiểu C, hãy lén chúng theo radar bằng cú pháp hàm dựng:' curr_tok = token_value (ch) '. Tác giả của hướng dẫn phong cách của bạn có thể suy nghĩ hai lần trước khi cấm các nhà xây dựng đối số đơn, mặc dù chúng chỉ có thể được gọi bằng cách sử dụng một dàn diễn viên kiểu C. ;-) –