1

我正在尝试从 Maker 合约创建 Taker 合约的新实例并向其发送一些价值。

然后稍后我想从 Taker 合约中将一个值发送回 Maker 合约

maker.change.value(5)(y);

但是它找不到名为“change”的函数并引发错误。我能想到的唯一可能的解释是它们需要异步执行但同时编译。

Untitled:27:3: Error: Member "change" not found or not visible after argument-dependent lookup in address
    maker.change.value(5)(y);
    ^----------^

(这在 Browser Solidity、Ethereum Studio 和 Truffle 中进行了测试 - 都带有相同的错误消息)

下面是完整的代码。

对于如何解决这个问题(和或参考)的任何建议,我将不胜感激。

谢谢!

pragma solidity ^0.4.2;

contract Maker {
uint x;

function Maker() {
    x = 5;
    Taker take = new Taker(this, 2);
    bool a = take.call.gas(200000).value(10)();
}

function change(uint val) external payable {
    x = val;
}
}

contract Taker {
uint y;
address maker;

function Taker(address makerAddr, uint val) {
    y = val;
    maker = makerAddr;
}

function sendChange() {
    maker.change.value(5)(y);
}
}
4

1 回答 1

1

此代码在 Browser Solidity 中与我一起使用

pragma solidity ^0.4.2;
contract Maker {
uint x;

function Maker() {
   x = 5;
   Taker take = new Taker(this, 2);
   bool a = take.call.gas(200000).value(10)();
}

function change(uint val) external {
   x = val;
}
}

contract Taker {
   uint y;
   Maker maker;

   function Taker(address makerAddr, uint val) {
      y = val;
      maker = Maker(makerAddr);
 }

 function sendChange() {
    maker.change(5);
 }
 }
于 2017-05-01T06:16:28.117 回答