You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:12:32