Solidity 存储结构未编译

Solidity storage struct not compiling

我是 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);
        ^--------------------------------------------^

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

请参阅 this explanation on Ethereum StackExchange for more details. The Solidity documentation 也很好地解释了如何存储变量以及何时使用 memorystorage

我遇到过类似的情况,解决办法是:

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