首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:类型bytes32[]内存不能隐式转换为预期类型bytes32[3]存储引用

TypeError:类型bytes32[]内存不能隐式转换为预期类型bytes32[3]存储引用
EN

Ethereum用户
提问于 2017-08-25 08:33:32
回答 2查看 8K关注 0票数 3

包装器类来实例化其他类

代码语言:javascript
复制
contract WrapperCreator {

    function WrapperCreator() {
    }

    function createTopic(string name, bytes32[] resultNames, uint256 endBlock)
        returns (Topic tokenAddress)
    {
        return new Topic(name, resultNames, bettingEndBlock);
    }
}

WrapperCreator

测试用例

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

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/WrapperCreator.sol";

contract TestWrapperCreator {
    bytes32[3] resultNames;

    function beforeEach() {
        resultNames = new bytes32[](3);
        resultNames[0] = "first";
        resultNames[1] = "second";
        resultNames[2] = "third";
    }

    function testConstructor() {
        WrapperCreator wrapperCreator = WrapperCreator(DeployedAddresses.WrapperCreator());
        Topic testTopic = wrapperCreator.createTopic("test", resultNames, 1000000);

        Assert.equal(testTopic.getResultName(0), "first", "Expected result name matches");
    }
}

我得到以下错误:

代码语言:javascript
复制
,../test/TestWrapperCreator.sol:11:23: TypeError: Type bytes32[] memory is not implicitly convertible to expected type bytes32[3] storage ref.
        resultNames = new bytes32[](3);
                      ^--------------^
,../test/TestWrapperCreator.sol:19:60: TypeError: Invalid type for argument in function call. Invalid implicit conversion from bytes32[3] storage ref to bytes32[] memory requested.
        Topic testTopic = eventCreator.createTopic("test", resultNames, 1000000);
EN

回答 2

Ethereum用户

回答已采纳

发布于 2017-08-25 10:36:28

createTopic方法期望使用bytes32[]类型,这是一个动态的bytes32数组,但是您要向它传递一个bytes32[3],一个固定大小的bytes32数组。

变化

代码语言:javascript
复制
bytes32[3] resultNames;

代码语言:javascript
复制
bytes32[] resultNames;

还请注意,您正在传递一个存储引用,因此如果方法修改数组,下一个测试将读取更新的值。

票数 3
EN

Ethereum用户

发布于 2017-08-25 10:58:30

或者,您可以使用:

代码语言:javascript
复制
bytes32[3] resultNames;
function beforeEach() {

    bytes32[3] storage a ;
    resultNames =a;
    resultNames[0] = "first";
    resultNames[1] = "second";
    resultNames[2] = "third";
}
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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