Solidity代码编译报错:ParserError: Expected ';' but got '(' 求助
编译错误原因排查与修复
核心错误原因
- 函数调用语法错误:Solidity中调用合约实例的方法必须使用点号(.),你代码里的
simpleStorage store(_simpleStorageNumber);用空格分隔实例和方法名,编译器会把store识别为变量定义,因此触发"Expected ';' but got '('"的语法错误。 - 额外拼写问题:函数参数
_simpleStorrageIndex多写了一个'r',正确应为_simpleStorageIndex,虽不影响编译,但会造成命名混淆。
修复后的完整代码
// 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{ SimpleStorage simpleStorage = SimpleStorage(address(simpleStorageArray[_simpleStorageIndex])); simpleStorage.store(_simpleStorageNumber); } }
关键修正点说明
- 把
simpleStorage store(_simpleStorageNumber);改为simpleStorage.store(_simpleStorageNumber);,用点号连接实例与方法名,符合Solidity函数调用规范。 - 修正参数名
_simpleStorrageIndex为_simpleStorageIndex,保持命名的一致性和可读性。
内容的提问来源于stack exchange,提问作者whatever12
相关产品推荐
相关产品推荐

