Явное преобразование типов не допускается из "literal_string" в "указатель хранилища строк"
Я разрабатываю фиктивный тестовый контракт на прочность с трюфелем, для кода ниже,
pragma solidity ^0.4.17;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/SkillDevelopment.sol";
contract TestSkillDevelopment {
SkillDevelopment skillDevelopmentContract = SkillDevelopment(DeployedAddresses.SkillDevelopment());
function testSetStudentEnrollInfo() public {
skillDevelopmentContract.setStudentEnrollInfo("{\"Info\":[{\"id\":\"06bb05b8b3152b0323f4a9c07ae84f0c513b24946a8f8ec685af7cd763f7ffad\",\"studentId\":6532916,\"parenterId\":6187778,\"schemeId\":3853115,\"batchId\":3458926,\"instructorId\":1175723,\"trainingId\":2599715,\"studentSkillState\":1,\"state\":1}]}");
string expected = string("{\"Info\":[{\"id\":\"06bb05b8b3152b0323f4a9c07ae84f0c513b24946a8f8ec685af7cd763f7ffad\",\"studentId\":6532916,\"parenterId\":6187778,\"schemeId\":3853115,\"batchId\":3458926,\"instructorId\":1175723,\"trainingId\":2599715,\"studentSkillState\":1,\"state\":1}]}");
Assert.equal(skillDevelopmentContract.getStudentEnrollInfo(), expected, "The message should be set");
}
}
но получаю ошибку
Msgstr "Ошибка типа: явное преобразование типа не разрешено из"literal_string в "указатель хранилища строк"."
во время выполнения команды "тест трюфеля".
Подскажите пожалуйста, как здесь не так.
1 ответ
Решение
Попробуйте это вместо этого:
string memory expected = "{\"Info\":[{\"id\":\"06bb05b8b3152b0323f4a9c07ae84f0c513b24946a8f8ec685af7cd763f7ffad\",\"studentId\":6532916,\"parenterId\":6187778,\"schemeId\":3853115,\"batchId\":3458926,\"instructorId\":1175723,\"trainingId\":2599715,\"studentSkillState\":1,\"state\":1}]}";
Расположение по умолчанию для string
является storage
, что означало бы, что вы должны указать на некоторую переменную состояния в хранилище. Переключение на memory
решает эту проблему. Наконец, явное приведение к string
является ненужным (потому что значение уже является строкой) и вызывает ошибку компиляции, которую вы видели.