Solidity Error :: ParserError: Expected '(' but got 'public'
Solidity Error :: ParserError: Expected '(' but got 'public'
我一直收到这个错误......
"from solidity:
ParserError: Expected '(' but got 'public'
--> contracts/3_Ballot.sol:6:24:
|
6 | function PiggyBank public()
| ^^^^^^",
怎么办?
pragma solidity ^0.8.0;
contract PiggyBank{
address creator;
uint deposits;
function PiggyBank public() \error in this line
{
creator=msg.sendor;
deposits=0;
}
function deposit() payable returns(uint)
{
if(msg.value>0)
deposits=deposits+1;
return getNumberofDeposits();
}
function getNumberofDeposits() constant returns(uint)
{
return deposit;
}
function Killl();{
if(msg.sendor==creator)
selfdestruct(creator);
}
}
您使用的是旧版 solidity 的语法,当前 0.8 版本不支持该语法。
首先,要消除语法错误,请将 function PiggyBank public()
替换为 function PiggyBank() public
。
在旧版本的 Solidity(最高 0.5)中,使用与合约同名的函数作为构造函数。在当前版本 0.8 中,您需要使用 constructor
关键字 - 否则任何人都可以随时公开调用该函数(不仅仅是在合约部署期间)。
// replace `function PiggyBank public()` to `constructor()`
constructor() {
creator=msg.sendor;
deposits=0;
}
然后又出现了一些语法错误(函数定义不正确;Killl()
函数定义处多了一个分号;缺少可见性修饰符),类型错误(selfdestruct
参数需要 payable
) 和拼写错误(您的代码使用 msg.sendor
而不是 msg.sender
)出现。查看更正后的代码:
pragma solidity ^0.8.0;
contract PiggyBank {
address creator;
uint deposits;
constructor() {
creator=msg.sender;
deposits=0;
}
function deposit() public payable returns(uint) {
if(msg.value>0) {
deposits=deposits+1;
}
return getNumberofDeposits();
}
function getNumberofDeposits() public view returns(uint) {
return deposits;
}
function Killl() public {
if(msg.sender==creator) {
selfdestruct(payable(creator));
}
}
}
我一直收到这个错误......
"from solidity:
ParserError: Expected '(' but got 'public'
--> contracts/3_Ballot.sol:6:24:
|
6 | function PiggyBank public()
| ^^^^^^",
怎么办?
pragma solidity ^0.8.0;
contract PiggyBank{
address creator;
uint deposits;
function PiggyBank public() \error in this line
{
creator=msg.sendor;
deposits=0;
}
function deposit() payable returns(uint)
{
if(msg.value>0)
deposits=deposits+1;
return getNumberofDeposits();
}
function getNumberofDeposits() constant returns(uint)
{
return deposit;
}
function Killl();{
if(msg.sendor==creator)
selfdestruct(creator);
}
}
您使用的是旧版 solidity 的语法,当前 0.8 版本不支持该语法。
首先,要消除语法错误,请将 function PiggyBank public()
替换为 function PiggyBank() public
。
在旧版本的 Solidity(最高 0.5)中,使用与合约同名的函数作为构造函数。在当前版本 0.8 中,您需要使用 constructor
关键字 - 否则任何人都可以随时公开调用该函数(不仅仅是在合约部署期间)。
// replace `function PiggyBank public()` to `constructor()`
constructor() {
creator=msg.sendor;
deposits=0;
}
然后又出现了一些语法错误(函数定义不正确;Killl()
函数定义处多了一个分号;缺少可见性修饰符),类型错误(selfdestruct
参数需要 payable
) 和拼写错误(您的代码使用 msg.sendor
而不是 msg.sender
)出现。查看更正后的代码:
pragma solidity ^0.8.0;
contract PiggyBank {
address creator;
uint deposits;
constructor() {
creator=msg.sender;
deposits=0;
}
function deposit() public payable returns(uint) {
if(msg.value>0) {
deposits=deposits+1;
}
return getNumberofDeposits();
}
function getNumberofDeposits() public view returns(uint) {
return deposits;
}
function Killl() public {
if(msg.sender==creator) {
selfdestruct(payable(creator));
}
}
}