不允许从 "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);
当我尝试放置一个字符串实例时,在 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);