【发布时间】:2021-12-29 08:27:13
【问题描述】:
我有两个单独部署的合同。
FirstContract.sol
contract FirstContract is ERC721 {
using Counters for Counters.Counter;
Counters.Counter public _id;
address payable _admin;
constructor(address admin) ERC721("Token Name", "TOKEN") {
_admin = payable(admin);
}
function incrementToken() public {
_id.increment();
}
}
SecondContract.sol
import "./FirstContract.sol";
contract SecondContract {
FirstContract firstContract;
constructor(address _address) {
firstContract = FirstContract(_address);
}
function increment() external {
firstContract.incrementToken();
}
function transferValue(uint value) external {
firstContract._admin.transfer(value); // error here
}
}
我收到了错误:
在函数 () 查看外部返回(应付地址)中的参数相关查找后,未找到或不可见成员“转移”。
我不知道为什么会出现这个错误,因为函数被标记为publichere。
【问题讨论】:
-
这是因为它被标记为内部。要绕过它,请在
FirstContract中创建一个调用_id.increment()的公共函数,因为 FirstContract 正在使用 Counter -
@egjlmn1 谢谢。我能够解决它,但遇到了另一个问题。我已经更新了问题。
-
您可以在 FirstContract 中创建一个额外的代理方法并通过它调用 admin.transfer - 就像对 incrementToken 所做的那样
-
我怀疑是因为 _admin 不是公开的。除此之外
transfer不建议发送以太币。尝试切换到call()看这里solidity-by-example.org/sending-ether
标签: blockchain ethereum solidity smartcontracts