不允许从 "string storage ref" 到 "contract vault" 的显式类型转换

Explicit type conversion not allowed from "string storage ref" to "contract vault"

当我尝试放置一个字符串实例时,在 remix 环境中出现了如标题所示的错误消息。我使用的是 0.8.0 版本的 solidity。如何将字符串变量放入主合约的 'vault' 合约实例中而不会出现错误(如标题所示)

以下是金库合约:

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);
    }
    
    
}

securityVault = vault(keyVal);

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


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

securityVault = new vault(keyVal);