2016-03-02 5 views
5

У меня есть структура Покупка, в которую я помещаю массив платежей. Однако, когда я пытаюсь добавить новый массив платежей в свой метод makePayment, я получаю сообщение об ошибке от компилятора целостности: «Внутренняя ошибка компилятора: копирование типа struct Память платежной памяти [] на память еще не поддерживается». Когда я меняю массив мерцания на storage или memory, я получаю ту же ошибку. Я добавил соответствующий код ниже.Как инициализировать массив в структуре

Можно ли сделать то, что я пытаюсь сделать в прочности? Я не вижу ничего явно, говоря, что это невозможно в документации, но я также не вижу примеров, которые делают то, что я пытаюсь сделать. : |

struct Payment { 
    address maker; 
    uint amount; 
    } 

    struct Purchase { 
    uint product_id; 
    bool complete; 
    Payment[] payments; 
    } 
    Purchase[] purchases; 

    function makePayment(uint product_id, uint amt, uint purchase_id) returns (bool) { 

     Payment[] payments; 
     payments[0] = Payment(address, amt); 
     purchases[purchase_id] = Purchase(product_id, false, payments); 
    } 
+0

Возможно, это происходило, потому что я не использовал достаточное количество газа для транзакции. – unflores

+0

Вы видели, что есть [Ethereum SE beta] (http://ethereum.stackexchange.com/)? – default

ответ

6

При настройке необходимо вручную изменить длину массива платежей.

Либо использование:

Payment[] payments; 
    payments[payments.length++] = Payment(address, amt); 

Или:

Payment[] payments; 
payments.push(Payment(address, amt)); 

Для установки массива платежей в Purchase, вместо создания массива и пытается установить его в Purchase.payments вы можете сделать следующие:

uint purchase_id = purchases.length++; 
purchases[purchase_id].product_id = product_id; 
purchases[purchase_id].complete = false; 
purchases[purchase_id].payments.push(Payment(msg.sender, amt)); 

Продление длины покупки автоматически создаст новый атрибут эс. Затем вы можете установить их вручную.

+0

В этом случае требуется ли 'payments' ключевое слово' memory'? –

Смежные вопросы