首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用接口的契约不编译

使用接口的契约不编译
EN

Ethereum用户
提问于 2018-11-05 16:47:57
回答 1查看 201关注 0票数 0

我正在学习稳固,我正在使用Remix来实验和提高我的学习。我目前正在尝试创建一个使用接口的简单契约。

代码语言:javascript
复制
pragma solidity ^0.4.19;

contract InterfaceWithMe {

    function call() returns (string);

}

contract Interfacing {

    address ckAddress = 0x9fe1c58215407d67719ba680360940056e5eceb7;
    InterfaceWithMe daContract = InterfaceWithMe(ckAddress);

    function call() returns (string) {
        return daContract.call();
    }

当我在Remix上尝试编译它时,我在第14行中得到以下类型错误:

TypeError:返回参数类型、不可访问的动态类型并不意味着转换为预期类型(第一个返回变量的类型)字符串内存。

下面是我用来与该合同进行接口的另一个合同:

代码语言:javascript
复制
pragma solidity ^0.4.19;

contract InterfaceWithMe {

    function call() returns (string) {
        return "Hello";
    }
}

谢谢你的帮助。

EN

回答 1

Ethereum用户

发布于 2018-11-05 20:53:34

对可读性和风格的一些改动。

代码语言:javascript
复制
pragma solidity 0.4.25;

contract Interface {
    function call() public pure returns (string);
    function isInterface() public pure returns(bool);
}

contract Interfacing {

    Interface daContract; 

    constructor(address theContract) public {
        daContract = Interface(theContract);
        require(daContract.isInterface());
    }

    function call() public view returns (string) {
        return daContract.call();
    }

}

contract InterfaceWithMe is Interface {

    function call() public pure returns (string) {
        return "Hello";
    }

    function isInterface() public pure returns(bool) {
        return true;
    }
}

这是在Remix,以显示它的工作。

  1. 部署InterfaceWithMe
  2. 将已部署地址复制到剪贴板。
  3. 部署Interfacing,将地址从剪贴板传递到构造函数中。
  4. 在`接口中调用call
  5. Hello

希望能帮上忙。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/61780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档