// SPDX-License-Identifier: MIT
pragma solidity >=0.8.9;
contract Storage {
uint number;
// takes a value _number and assigns it to the state variable number
function setNumber(uint _number) public {
number = _number;
}
// returns the value of the state variable number
function getNumber() public view {
return number;
}
}
我在 getNumber() 函数中的此 Solidity 代码中遇到错误。所以,请任何人都可以解释这一点或使其正确。
我无法理解为什么我会出错,而且我是 Solidity 的初学者。
我收到的错误是:
TypeError:返回语句中的参数数量与返回声明中的参数数量不同。 --> 首先.sol:15:9: | 15 | 15返回号码; | ^^^^^^^^^^^^^^
缺少 getNumber 函数
returns (uint256)
function getNumber() public view returns (uint256) {
return number;
}
@安邦说得对, 您缺少函数前面的返回值(类型)。 如果您返回多种类型的变量,那么它应该看起来像
function getNumber() public view returns (uint256, bool) {
return (number, false);
}
上面只是一个如何返回多种类型变量的示例。根据您的需要使用它。
此外,如果您打算练习 Solidity 智能合约,您可以访问 DApp World 平台,在那里您会找到很多评估。 链接:评估
所提供代码中的问题在于 getNumber 函数。该函数被声明为视图,这表明它不应修改合约的状态。但是,该函数试图返回状态变量 number 的值,这被视为状态更改操作。
要解决此问题,您应该更新 getNumber 函数以在返回类型中包含 view 关键字。这是更正后的代码:
// SPDX 许可证标识符:MIT 编译指示可靠性 >=0.8.9;
合约存储{ uint 数;
// takes a value _number and assigns it to the state variable number
function setNumber(uint _number) public {
number = _number;
}
// returns the value of the state variable number
function getNumber() public view returns (uint) {
return number;
}
}
通过在 view 之后添加 returns (uint),该函数现在可以正确指示它返回一个值,而无需修改合约的状态。