【问题标题】:Explicit type conversion not allowed from "string storage ref" to "contract vault"不允许从“string storage ref”到“contract vault”的显式类型转换
【发布时间】:2021-10-24 17:49:09
【问题描述】:

当我尝试放置一个字符串实例时,在remix环境中出现了如标题所示的错误信息。我正在使用 0.8.0 版的solidity。如何将字符串变量从我的主合同中放置在“保险库”合同实例中而不会出现错误(如标题所示)

以下是保险库合约:

contract vault{
    string public vaultKey = "vault";
    string public inputKey = "";
    bool public valid = false;

       constructor(string memory _inputKey) {
        inputKey = _inputKey;
        valid =  keccak256(abi.encodePacked((inputKey))) == keccak256(abi.encodePacked((vaultKey)));
    }
    function getValidity()public returns(bool){
        return valid;
    }
}

以下是将要使用的主要合约:

contract manager{
// most of the irrelevant lines of code have been removed
    string public keyVal; //for vault
    vault public securityVault;

    constructor(string memory _vaultKey ){     
        keyVal = _vaultKey;
        securityVault = vault(keyVal);
    }
    
    
}

【问题讨论】:

    标签: ethereum solidity smartcontracts


    【解决方案1】:
    securityVault = vault(keyVal);
    

    此行正在尝试在 地址 keyVal 加载 vault 合约。失败并出现错误,因为您传递的是字符串 - 而不是地址。


    如果要将vault合约部署到新地址,将字符串传递给构造函数,则需要使用new关键字。

    securityVault = new vault(keyVal);
    

    【讨论】:

    • 它有效,谢谢!
    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 2022-09-23
    • 2014-06-17
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多