Solidity存储结构不编译

时间:2017-11-12 20:42:02

标签: ethereum solidity

我是新手,我只是在体验一些简单的代码。 基本上我只是想创建一个结构,它将永久存储数据在合同中。根据我需要storage的文件。 但是,除非我使用memory,否则以下代码不会编译。为什么呢?

pragma solidity ^0.4.11;
contract test {

struct Selling {
    address addr;
    string name;
    uint price;
}

mapping(string => Selling) selling;

function sellName() constant returns (bool ok)
{
    address a = 0x4c3032756d5884D4cAeb2F1eba52cDb79235C2CA;
    Selling storage myStruct = Selling(a,"hey",12);
}
}

我得到的错误是:

ERROR:
browser/test.sol:16:9: TypeError: Type struct test.Selling memory is not implicitly convertible to expected type struct test.Selling storage pointer.
        Selling storage myStruct = Selling(a,"hey",12);
        ^--------------------------------------------^

2 个答案:

答案 0 :(得分:2)

当您第一次创建myStruct实例时,它将在内存中创建,然后写入存储(假设您将对象放入selling地图并且不要声明您的方法constant)函数返回时。如果您要在另一个函数中从地图中检索项目,那么您可以将其声明为存储变量。

有关详细信息,请参阅以太坊StackExchange上的this explanationSolidity documentation还可以很好地解释变量的存储方式以及何时使用memory vs storage

答案 1 :(得分:1)

我遇到了类似的情况,解决方法是:

function sellName() constant returns (bool ok)
{
    address a = 0x4c3032756d5884D4cAeb2F1eba52cDb79235C2CA;
    Selling memory myStruct = Selling(a,"hey",12);
    // insert 'myStruct' to the mapping:
    selling[a] = myStruct;
}