Solidity合约中声明myUser memory user时出现“Identifier not found or not unique”错误的技术求助
解决Solidity中"Identifier not found or not unique"错误
嘿,这个问题其实很好排查——你遇到的是标识符大小写不匹配的问题!
在你的合约里,你定义的结构体名称是MyUser(首字母大写):
struct MyUser { address publicKey; string userName; }
但在createUser函数里声明变量时,你写成了小写开头的myUser:
myUser memory user;
Solidity是严格区分大小写的编程语言,编译器会把MyUser和myUser当成两个完全不同的标识符,所以它找不到名为myUser的类型,就抛出了"Identifier not found or not unique"的错误。
解决方法
只需要把变量声明的类型改成和结构体一致的MyUser就行,修改后的createUser函数代码如下:
function createUser( string memory _userName ) public { MyUser memory user; // 这里改成大写开头的MyUser user.publicKey = msg.sender; user.userName = _userName; users.push(user); }
另外,也可以更简洁地直接在push的时候初始化结构体,让代码更紧凑:
function createUser( string memory _userName ) public { users.push(MyUser(msg.sender, _userName)); }
以后写Solidity代码的时候要注意,自定义类型(结构体、合约名等)的大小写要和使用时保持完全一致,避免这类低级错误~
内容的提问来源于stack exchange,提问作者Yurikaza
相关产品推荐
相关产品推荐

