首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >成员“地址”在依赖于参数的元组查找后未找到或不可见(地址、int16、int8、uint256、bool、int256、address)

成员“地址”在依赖于参数的元组查找后未找到或不可见(地址、int16、int8、uint256、bool、int256、address)
EN

Ethereum用户
提问于 2021-05-13 13:30:21
回答 1查看 1.2K关注 0票数 2

我对编程很陌生,我试图访问位于另一个智能契约中的结构,但我收到了以下错误。

"TypeError:成员“地址”在元组(地址、int16、int8、uint256、bool、int256、address)中找不到或看不见。-> Auction.sol:45:23:

是否可以访问不同契约映射中的结构?

我的代码如下:

代码语言:javascript
复制
pragma solidity ^0.8.3;

contract Registry {
    
    mapping(int => User) public users;
    int8 public userCount = 0;
    
    struct User {
        address Address;
        int16 Longitude;
        int8 Latitude;
        uint Transformer_ID;
        bool Is_Prosumer;
        int Peak_Power;
        address Smart_Meter;
    }
    
    function addUser(int16 _longitude, int8 _latitude, uint  _transformerID, bool  _isProsumer, int _peakPower, address _smartMeter) public {
        users[userCount] = User(msg.sender, _longitude, _latitude, _transformerID, _isProsumer, _peakPower, _smartMeter);
        userCount ++;
    }
}

contract Auction {

    Registry r;
    address registryAddr;
    function RegistryRead(address addr) public {
        registryAddr = addr;
        r = Registry(r);
    }
    
    function verify(address addr, address bid) public returns (bool) {
        int i; bool x = false;
        
        int8 max = r.userCount();
        
        for(i = 0; i == max; i ++)
            if(bid == r.users(i).Address) x = true;
            
        return x;
    }
    
}
EN

回答 1

Ethereum用户

发布于 2021-05-13 15:01:36

这是因为当拍卖契约读取users时,它只获取数组的数据类型,而不是您在Resigtry契约中使用的名称。像这样理解它;

代码语言:javascript
复制
uint => (address, int16, int8, uint, bool, int, address)

因此拍卖合同不能查找地址。

解决方案:您可以使用

代码语言:javascript
复制
(address userAddress,,,,,,) = r.users(i);
if(bid ==userAddress) {
    x = true;
}

或者,添加一个getUser函数,说明returs用户键入:

代码语言:javascript
复制
contract Registry {
    
    mapping(int => User) public users;
    int8 public userCount = 0;   
    struct User {
        address Address;
        int16 Longitude;
        int8 Latitude;
        uint Transformer_ID;
        bool Is_Prosumer;
        int Peak_Power;
        address Smart_Meter;
    }
    
    function addUser(int16 _longitude, int8 _latitude, uint  _transformerID, bool  _isProsumer, int _peakPower, address _smartMeter) public {
        users[userCount] = User(msg.sender, _longitude, _latitude, _transformerID, _isProsumer, _peakPower, _smartMeter);
        userCount ++;
    }
    
    function getUser(int _id) public view returns(User memory) {
        return users[_id];
    }
}

contract Auction {

    Registry r;
   
    
    address registryAddr;
    function RegistryRead(address addr) public {
        registryAddr = addr;
        r = Registry(r);
    }
    
    function verify(address bid) public view returns (bool) {
        int i; bool x = false;
        int8 max = r.userCount();
       

        for(i = 0; i <= max; i ++) {
            if(bid == r.getUser(i).Address) {
                x = true;
            }
        }
            
        return x;
    }
    
}
票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/98866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档