我是新手,我只是在体验一些简单的代码。
基本上我只是想创建一个结构,它将永久存储数据在合同中。根据我需要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);
^--------------------------------------------^
答案 0 :(得分:2)
当您第一次创建myStruct
实例时,它将在内存中创建,然后写入存储(假设您将对象放入selling
地图并且不要声明您的方法constant
)函数返回时。如果您要在另一个函数中从地图中检索项目,那么您可以将其声明为存储变量。
有关详细信息,请参阅以太坊StackExchange上的this explanation。 Solidity 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;
}