Truffle Compile编译sol会经常遇到报错,特别是初次写Helloworld的同学们。那么我们一起分析一下sol文件创建规则,再到编码报错修改问题,本人也是以太坊编程技术和产品开发学习者,本文细节原创(作者:ETHRobinY):
Data location must be “memory” for return parameter in function, but none was given.
function sayHello() public view returns(string)
…(提示太多不附带了)
这是因为solidity语言更新到0.5.0版本以上的原因,所以2018年的教程大部分都没法能正常编译。这时候只要在returns (string)后面加上memory就好了。
从程序角度,我们要退回到contract合约文件的创建,再到代码内容出入。
1、contract合约文件很多同学喜欢在本地目录人工创建,但是这是不科学的。正确的手工做法是,使用truffle自带的create指令创建,代码如下:
我们需要手动增加一个合约helloworld.sol, 我们可以进入contracts目录,然后通过命令创建一个helloworld.sol,而不是直接新建一个helloworld.sol文件。先CMD调出console面板,完毕进入你的测试工程根目录,如下所示操作:
cd contracts
truffle create contract HelloWorld
完毕在contracts目录里成功创建了一个HelloWorld.sol的文件,注意字母大小写。
剩余打开此sol文件,复制如下代码:
pragma solidity ^0.5.0;
contract HelloWorld {
constructor() public{
}
string sayhi="HelloWorld~Success";
function sayhello() public view returns (string memory) {
return sayhi;
}
}
function sayhello() public view returns (string memory) 代码主要是这里有了变化在0.5.0版本之后。不过经过测试,建议采用view而不是pure,使用pure依然可能带来各种报错。
其次就是returns(string)变化为returns (string memory)。主要区别是在这里。好了剩余就是truffle compile编译合约,就可以成功了,剩余就是迁移合约migrate步骤了。这里就不单独论述了。如果有其他报错可以留言交流。