繁体   English   中英

这个警告的含义是什么?

[英]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 之前,我们需要将构造函数的可见性提供为publicinternal public可见性的情况下,合约可以直接部署在区块链上,而如果合约不是直接创建而是继承,那么我们声明了具有internal可见性的构造函数。
然而,对于 Solidity 编译器版本0.7.0或更高版本,我们做同样的事情但不同。 如果我们不希望合约直接部署而是继承,我们将合约本身声明为abstract 如果我们希望合约可以直接部署也可以被继承,我们不会将其声明为抽象合约,也不会在该类的构造函数中指定任何可见性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM