Cairo编译报错:结构体成员不可见且属性未被编译器识别
问题
编写Cairo合约的createRequest函数时触发编译错误,错误提示为Member is not visible in this context,编译器无法识别Request结构体的任何属性。相关函数代码:
fn createRequest(ref self: ContractState, description: ByteArray, value: usize, recipient: ContractAddress) { let newRequest = Request { description, value, recipient, isComplete: false, yesVotes: 0, voters: Default::default() }; self.requests.append(newRequest); }
解决方法
结合代码逻辑,问题核心是Request结构体的可见性配置:
给结构体成员添加公共可见性
Cairo中结构体成员默认私有,必须为每个成员加上pub修饰符,才能在函数中访问和初始化:#[derive(Drop, Serde)] pub struct Request { pub description: ByteArray, pub value: usize, pub recipient: ContractAddress, pub isComplete: bool, pub yesVotes: usize, pub voters: LegacyMap<ContractAddress, bool> }确认结构体作用域
如果Request定义在其他模块,要在当前函数所在作用域通过use导入,比如:use super::Request;或者使用完整模块路径引用结构体。
匹配字段名称大小写
初始化结构体时,字段名要和定义完全一致,注意大小写(比如isComplete不能写成IsComplete)。
内容的提问来源于stack exchange,提问作者Müller Espósito
相关产品推荐
相关产品推荐

