Я пытаюсь вернуть вложенный массив на солидность массаж ошибок говорит
"browser/HISTORYMultipleStateMach.sol:22:16: TypeError: Index expression cannot be omitted. return myArray[]; ^-------^" "browser/HISTORYMultipleStateMach.sol:22:16: TypeError: Index expression cannot be omitted. return myArray[]; ^-------^" Can someone tell me what is wrong? Thank you enum State{ A, B, C }
State[] curState;
State[][] myArray;
uint i=0;
constructor(uint Machines)public{
for(i=0;i<Machines;i++){
curState.push(State.A);
myArray.push(curState);
}enter code here
}
function historyOfStateMachine() public{
return myArray[];
}
function historyOfStateMachine() public{
return myArray[];
}
Теперь я удалил его фразу «browser/HISTORYMultipleStateMach.sol:22:9: TypeError: количество аргументов в операторе return отличается от количества аргументов в объявлении return. return myArray; ^------------^» @PiotrKamoda
как насчет сохранения Machines
во внешней области видимости (там, где вы объявляете myArray
), а затем выполнения return myArray[Machines]
?
Добро пожаловать в StackOverflow Selen! Не могли бы вы отформатировать свой вопрос?
Чтобы вернуть полный массив, вы должны удалить []
в return myArray[];
Кроме того, пока невозможно вернуть два уровня динамических массивов.
Начиная с версия 0.4.19 солидности, вы можете активировать экспериментальную поддержку произвольно вложенных
массивы с помощью директивы pragma experimental ABIEncoderV2;
. В этом случае ваш код будет следующим:
pragma solidity ^0.4.19;
pragma experimental ABIEncoderV2;
contract MyContract {
enum State{ A, B, C }
State[] curState;
State[][] myArray;
uint i=0;
constructor(uint Machines)public{
for(i=0;i<Machines;i++){
curState.push(State.A);
myArray.push(curState);
}
}
function historyOfStateMachine() public view returns (State[][]) {
return myArray;
}
}
попробуй убрать
[]
вreturn myArray[];