我正在尝试从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);
^----------^
(这是在浏览器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);
}
}
答案 0 :(得分:1)
此代码在浏览器合法性中与我合作
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);
}
}