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 也很好地解释了如何存储变量以及何时使用 memory
与 storage
。
我遇到过类似的情况,解决办法是:
function sellName() constant returns (bool ok)
{
address a = 0x4c3032756d5884D4cAeb2F1eba52cDb79235C2CA;
Selling memory myStruct = Selling(a,"hey",12);
// insert 'myStruct' to the mapping:
selling[a] = myStruct;
}
我是 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 也很好地解释了如何存储变量以及何时使用 memory
与 storage
。
我遇到过类似的情况,解决办法是:
function sellName() constant returns (bool ok)
{
address a = 0x4c3032756d5884D4cAeb2F1eba52cDb79235C2CA;
Selling memory myStruct = Selling(a,"hey",12);
// insert 'myStruct' to the mapping:
selling[a] = myStruct;
}