C++结构体引用成员传递异常求助:setFillColor颜色显示错误
问题解析与修复
你的代码存在两处关键错误,导致颜色显示异常,以下是具体问题和修正方案:
错误1:函数调用的参数类型不匹配
drawButtonSlot的参数是autonButton&(结构体引用),但你调用时传的是&auton1(结构体指针),这会触发类型不匹配问题。C++中引用不需要取地址符号,直接传递变量本身即可。
错误2:传递给setFillColor的参数类型错误
setFillColor要求接收color&类型参数,你传的&button.colour是color*(指针类型),程序会把指针地址当作color类型数据解析,自然得不到正确颜色。直接传递button.colour就能得到符合要求的color&引用。
另外,auton1是const常量对象,传递给非const引用会触发编译警告甚至错误,因此需要把drawButtonSlot的参数改为const autonButton&,保证类型匹配。
修正后的关键代码:
// uses VEXcode API // also excuse the odd color vs colour naming: I am British but the API is American. For clarity, // "color" is a type but "colour" is a name typedef struct { // other members color colour; // 原代码末尾多余的逗号建议删除,避免潜在语法问题 } autonButton; const autonButton auton1{ // other members .colour = color::blue, }; // 参数改为const引用,适配const对象 void drawButtonSlot(const autonButton& button) { // other code Brain.Screen.setFillColor(button.colour); // 直接传递成员变量,自动转为color& // other code }; // 直接传递const对象,不需要取地址 drawButtonSlot(auton1);
额外说明:
- 结构体定义中
color colour,末尾的逗号属于冗余语法,虽然部分编译器允许,但删除后代码更规范。 - 当你传递
button.colour给接收color&的函数时,C++会自动将该成员变量转换为对应的左值引用,完全符合函数的参数要求。
内容的提问来源于stack exchange,提问作者M.W
相关产品推荐
相关产品推荐

