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