编译 solidity 代码时的 ParserError 信息

ParserError message when compiling solidity code

我正在学习区块链和智能合约课程,我尝试 运行 的代码似乎无法编译,尽管它与课程中的代码完全相同。关于这个程序我不能说太多,因为我是一个新手,我只是想跟进,我无法确定是否存在语法错误或其他原因。我只能说,我使用的是我在上一课中编写的导入智能合约,它运行良好。

特定错误: contracts/StorageFactory.sol:20:5: ParserError: 预期编译指示、导入指令或 contract/interface/library/struct/enum 定义。 函数 sfGet(uint256 _simpleStorageIndex) public 查看 returns (uint256) { ^------^

代码 1:

// SPDX-License-Identifier: MIT

pragma solidity  ^0.6.0;

contract SimpleStorage {

//this will get initialized to 0!
uint256 favoriteNumber;
bool favoriteBool;

struct People {
    uint256 favoriteNumber;
    string name;
}

People[] public people;
mapping(string => uint256) public nametoFavoriteNumber;

function store(uint256 _favoriteNumber) public {
    favoriteNumber = _favoriteNumber;
}
function retrieve() public view returns(uint256) {
    return favoriteNumber;
}

function addPerson(string memory _name, uint256 _favoriteNumber) public {
    people.push(People(_favoriteNumber, _name));
    nametoFavoriteNumber[_name] = _favoriteNumber;
}
}

代码 2:

// SPDX-License-Identifier: MIT

pragma solidity  ^0.6.0;

import "./SimpleStorage.sol";

contract StorageFactory {
SimpleStorage[] public simpleStorageArray;
function createSimpleStorageContract() public {
    SimpleStorage simpleStorage = new SimpleStorage();
    simpleStorageArray.push(simpleStorage);
}
function sfStore(uint256 _simpleStorageIndex, uint256 _simpleStorageNumber) public {
    // Address
    // ABI
    SimpleStorage simpleStorage = SimpleStorage(address(simpleStorageArray[_simpleStorageIndex]));
    simpleStorage.store(_simpleStorageNumber);
}
}
function sfGet(uint256 _simpleStorageIndex) public view returns (uint256) {
    SimpleStorage simpleStorage = SimpleStorage(address(SimpleStorageArray[_simpleStorageIndex]));
    return simpleStorage.retrieve();
}

非常感谢。

sfStore() 函数中,您在末尾放置了两个大括号。这是您的代码:

function sfStore(uint256 _simpleStorageIndex, uint256 _simpleStorageNumber) public {
    // Address
    // ABI
    SimpleStorage simpleStorage = SimpleStorage(address(simpleStorageArray[_simpleStorageIndex]));
    simpleStorage.store(_simpleStorageNumber);
} 
} // <- THE ERROR IS HERE

你删除一个花括号,你就会解决这个问题。 新的 sfStore 函数代码必须类似于:

function sfStore(uint256 _simpleStorageIndex, uint256 _simpleStorageNumber) public {
  // Address
  // ABI
  SimpleStorage simpleStorage = 
  SimpleStorage(address(simpleStorageArray[_simpleStorageIndex]));
  simpleStorage.store(_simpleStorageNumber);
}