Я следил за лекцией на Udemy. Но у меня ошибка
вот мой 'Inbox/contracts/Inbox.sol'
pragma solidity ^0.4.17;
contract Inbox {
string public message;
function Inbox(string initialMessage) public {
message = initialMessage;
}
function setMessage(string newMessage) public {
message = newMessage;
}
}
и вот файл «Inbox/compile.js»
const path = require('path');
const fs = require('fs');
const solc = require('solc');
const inboxPath = path.resolve(__dirname, 'contracts','Inbox.sol');
const source = fs.readFileSync(inboxPath, 'utf8');
console.log(solc.compile(source, 1));
и после того, как я скомпилирую этот файл на терминале
узел compile.js
получил ошибку, как показано ниже
errors:
[ ':6:5: Warning: Defining constructors as functions with the same name
as the contract is deprecated. Use "constructor(...) { ... }"
instead.\n function Inbox(string initialMessage) public {\n ^
(Relevant source part starts here and spans across multiple lines).\n' ],
Я использую мак. Одна вещь, которую я сделал иначе, чем лекция, была «npm init» в другой папке вместо папки «Входящие», и я скопировал и вставил все созданные файлы в папку «Входящие».
Это должно быть предупреждение, а не ошибка. В любом случае, используя этот синтаксис
function Inbox(string initialMessage) public {
message = initialMessage;
}
устарело в новой версии Solidity. Вы должны использовать constructor
вместо имени контракта
constructor(string initialMessage) public {
message = initialMessage;
}
это будет компилироваться без предупреждений
pragma solidity ^0.4.22;
, иначе, если кто-то попытается скомпилировать ваш контракт, используя старый компилятор, он не будет работать должным образом.new
Просто используйте конструктор() должно быть хорошо.
constructor(string initialMessage) public {
message = initialMessage;
}
Если вы используете конструктор функций(...)... , я думаю, вы получите следующее предупреждение:
Предупреждение: эта функция называется «конструктор», но не является конструктором контракта. Если вы хотите, чтобы это был конструктор, используйте "constructor(...) { ... }" без ключевого слова "function" для его определения.
Я лично просто изменил компилятор, чтобы решить проблему. Вместо компилятора версии 4.17+ используйте компилятор версии 4.17. Надеюсь, это помогло:
Не забудьте добавить memory
или storage
объявить такие параметры, как строка в конструкторе
constructor(string memory initialMessage) {
message = initialMessage;
}
Дон Крамли
мирг