[英]What's the meaning of this warning in solidity?
当我编写代码时,我在代码的第 10 行收到警告。 谁能告诉我这个警告是什么意思?
我的代码
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0 < 0.9.0;
contract PracticeTest // It's a class
{
string name ;
uint256 age;
constructor() public
{
name = "Ali";
age = 21 ;
}
}
这是警告
Warning: Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient.
--> contracts/PracticeTest.sol:10:5:
|
10 | constructor() public
| ^ (Relevant source part starts here and spans across multiple lines).
构造函数不再需要可见性(
public
/internal
):为了防止创建合同,可以将其标记为abstract
。 这使得构造函数的可见性概念过时了。
资料来源: https ://docs.soliditylang.org/en/v0.8.13/070-break-changes.html#functions-and-events
因此,如果您使用 Solidity 0.7 或更高版本编译合约,构造函数可见性(在您的情况下为public
)将被忽略,您可以安全地删除它。
constructor()
{
name = "Ali";
age = 21 ;
}
我只是补充Petr Hejda的答案。 在 Solidity 编译器版本 0.7.0 之前,我们需要将构造函数的可见性提供为public
或internal
。 在public
可见性的情况下,合约可以直接部署在区块链上,而如果合约不是直接创建而是继承,那么我们声明了具有internal
可见性的构造函数。
然而,对于 Solidity 编译器版本0.7.0
或更高版本,我们做同样的事情但不同。 如果我们不希望合约直接部署而是继承,我们将合约本身声明为abstract
。 如果我们希望合约可以直接部署也可以被继承,我们不会将其声明为抽象合约,也不会在该类的构造函数中指定任何可见性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.