当我部署以下智能合约时,变量管理器的地址为0x0000000000000000000000000000000000000000000000。只有在我调用构造函数(Lottery())之后,变量管理器的地址才与部署它的帐户匹配。
为什么我的构造函数没有被自动调用?
pragma solidity ^0.4.17;
contract Lottery {
address public manager;
function Lottery() public {
manager = msg.sender;
}
}
答案 0 :(得分:0)
应该自动调用您的构造函数。
我在编译器版本0.4.17中使用了Remix(https://remix.ethereum.org),然后进行了部署,并按预期将manager设置为部署地址。
如果合同名称和构造函数的名称不同,则会遇到您遇到的问题,因此该函数不再是构造函数。
Solidity 0.4.22更改为使用constructor
代替合同名称,以避免这些类型的错误:
https://github.com/ethereum/solidity/releases/tag/v0.4.22
现在应该使用构造函数(uint arg1,uint arg2){...}来定义构造函数,以使其脱颖而出,并避免在重命名合同而不是重命名其构造函数时出现错误。
我建议您考虑使用更高版本的Solidity 0.5.x。