【问题标题】:Invalid type for argument in function call. Invalid implicit conversion from address to address payable requested函数调用中的参数类型无效。请求的从地址到应付地址的无效隐式转换
【发布时间】:2021-12-31 06:52:40
【问题描述】:

我在混音中遇到这个错误:

函数调用中的参数类型无效。请求的从地址到应付地址的隐式转换无效

它指的是第 9 行上的msg.sender,我在下面用粗体表示。这就是我正在编写的代码:

function startProject(
        string calldata title,
        string calldata description,
        uint durationInDays,
        uint amountToRaise
    ) external {
        uint raiseUntil = block.timestamp.add(durationInDays.mul(1 days));
Project newProject = new Project(
    ***msg.sender***,
    title,
    description,
    raiseUntil,
    amountToRaise
);
projects.push(newProject);

请帮忙:)

【问题讨论】:

  • 在格式化代码以提高可读性的过程中,我发现原因可能在Project 的定义中。你也可以分享它的定义吗? (我假设它是 structcontract)。
  • 感谢您的回复,错误是指projects new project line 'function startProject( string calldata title, string calldata description, uint durationInDays, uint amountToRaise ) external { uint raiseUntil = block.timestamp.add(durationInDays.mul(1 天));项目 newProject = new Project(msg.sender, title, description, raiseUntil, amountToRaise);项目.push(newProject);发出ProjectStarted(地址(newProject),msg.sender,标题,描述,raiseUntil,amountToRaise);'
  • 嘿,我编辑了帖子,谢谢你的回复我真的很欣赏它,我还没有设法解决它。 :)
  • 这是Project参考。我正在寻找定义 - 可能以struct Project {contract Project { 开头。
  • medium.com/openberry/… 这是代码,希望对您有所帮助:))

标签: blockchain solidity web3 remix


【解决方案1】:

linked code 包含contract Project 及其constructor 的定义:

constructor
(
    address payable projectStarter,
    string memory projectTitle,
    string memory projectDesc,
    uint fundRaisingDeadline,
    uint goalAmount
) public {
    // ...
}

它接受address payable 作为第一个参数。但是,msg.sender 默认不是payable(从 Solidity 0.8.0 开始)。

解决方案:address 类型转换为address payable

Project newProject = new Project(
    payable(msg.sender),
    title,
    description,
    raiseUntil,
    amountToRaise
);

【讨论】:

  • 非常感谢,非常感谢,成功了。
猜你喜欢
  • 2022-08-19
  • 2022-08-13
  • 2021-12-30
  • 1970-01-01
  • 2022-07-19
  • 2022-01-02
  • 2022-01-07
  • 2017-03-07
  • 2013-01-02
相关资源
最近更新 更多