如何解决错误“函数调用中的参数类型无效。从地址到请求的应付地址的隐式转换无效”

问题描述 投票:0回答:3

我在混音时遇到此错误:

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

指的是下面第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);

为什么我会收到此错误?我该如何解决?

javascript blockchain solidity web3js remix
3个回答
6
投票

链接代码包含

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
);

0
投票

如果您还不知道地址类型的值是什么,请将其传递为:address(0)


0
投票

startProject 缺少地址变量。

© www.soinside.com 2019 - 2024. All rights reserved.