为什么我在此 Solidity 代码中遇到错误?

问题描述 投票:0回答:3
// 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返回号码; | ^^^^^^^^^^^^^^

solidity web3js
3个回答
0
投票

缺少 getNumber 函数

returns (uint256)

function getNumber() public view returns (uint256) {
    return number;
}

0
投票

@安邦说得对, 您缺少函数前面的返回值(类型)。 如果您返回多种类型的变量,那么它应该看起来像

function getNumber() public view returns (uint256, bool) {
    return (number, false);
}

上面只是一个如何返回多种类型变量的示例。根据您的需要使用它。

此外,如果您打算练习 Solidity 智能合约,您可以访问 DApp World 平台,在那里您会找到很多评估。 链接:评估


0
投票

所提供代码中的问题在于 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),该函数现在可以正确指示它返回一个值,而无需修改合约的状态。

© www.soinside.com 2019 - 2024. All rights reserved.