ตัวอย่าง:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันรวบรวมสิ่งนี้:
<source>: In function 'int main()':
<source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type 'unsigned int'
func(clr);
^~~
ฉันคิดว่าตัวแปร ( clr
) ที่ฉันส่งให้func(unsigned int&)
คือค่า lvalue ฉันสามารถรับที่อยู่clr
และสามารถกำหนดค่าอื่นให้กับมันได้ ทำไมมันกลายเป็นค่า rvalue เมื่อฉันพยายามส่งมันให้func(unsigned int&)
?
@ NathanOliver-ReinstateMonica ตามความเห็นดั้งเดิมของฉันฉันคิดว่า
—
Koen
typedef enum
ไม่ใช่คนพื้นเมืองและ C ++ จะถือว่าเป็นunsigned int
ประเภทแน่นอน
ข้อความแสดงข้อผิดพลาดของ GCC เป็นสิ่งที่ไม่ดีในกรณีนี้
—
cpplearner
clr
เสียงดังกราวจะให้ข้อความน้อยทำให้เกิดความสับสนโดยการพิมพ์ชนิดเดิมของ
@cpplearner ใช่นั่นคือเหตุผลที่ฉันคิดว่า
—
Koen
enum type
เป็นเช่นunsigned int
ใน C ++
enum X
เป็นประเภทของตัวเองแตกต่างจากint
enum
unsigned int