在 Solidity 中从另一个合约访问公共变量时出现问题

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

为什么 Fetch 合约中的 get 函数无法获取从 SimpleStorage 合约导入的 storeData 变量的值。两份合同都存在于单独的文件中。

文件名-

importCheck.sol

代码-

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// import "contracts/Hello.sol";

import * as newSymbol from "contracts/Hello.sol";

contract Fetch {
    newSymbol.SimpleStorage public demo = new newSymbol.SimpleStorage();

    function getStoreData() public view returns(uint) {
        return demo.get();
    }
}

文件名-

Hello.sol

代码-

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

contract SimpleStorage {
    uint public storeData;

    function set(uint x) public {
        storeData = x;
    }

    function get() public view returns (uint){
        return storeData;
    }
    
}

我已经在 Remix VM 和 Sepolia 测试网中部署了合约,但 storeData 变量仍然没有返回 SimpleStorage 合约中分配的值。

solidity smartcontracts remix
1个回答
0
投票
newSymbol.SimpleStorage public demo = new newSymbol.SimpleStorage();

原始代码中的这一行部署了

SimpleStorage
合约的新实例,并将其存储到新地址(该地址在您的
demo
变量中可用)。


如果您想访问现有合约,您可以创建一个

contract
interface
类型指针 ,不带
new
关键字
,并将现有合约地址传递给它。

newSymbol.SimpleStorage public demo = newSymbol.SimpleStorage(address(0x123));
© www.soinside.com 2019 - 2024. All rights reserved.