2016-03-02 31 views
5

Ho una struttura Acquisto in cui sto inserendo una serie di pagamenti. Tuttavia, quando provo ad aggiungere il nuovo array di pagamenti nel mio metodo makePayment ottengo un errore dal compilatore di solidità: "Errore interno del compilatore: copia di tipo struct Memoria di pagamento [] memoria in memoria non ancora supportata." Quando cambio l'array mayment da storage o memory, ottengo lo stesso errore. Ho aggiunto il codice pertinente qui sotto.Come inizializzare una matrice in una struttura

È possibile fare ciò che cerco di fare in solidità? Non vedo nulla che affermi esplicitamente che non è possibile nella documentazione, ma non vedo nemmeno esempi che facciano quello che sto cercando di fare. : |

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

È possibile che ciò stia accadendo perché non stavo usando abbastanza gas per la transazione. – unflores

+0

Hai visto che c'è una [Ethereum SE beta] (http://ethereum.stackexchange.com/)? – default

risposta

6

È necessario modificare manualmente la lunghezza della serie di pagamenti durante l'impostazione.

O uso:

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

Oppure:

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

Per impostare l'allineamento dei pagamenti in Acquisto, invece di creare un array e cercando di impostare per i Purchase.payments si può fare la di seguito:

L'estensione della lunghezza degli acquisti creerà automaticamente il nuovo attributo es. Quindi puoi impostarli manualmente.

+0

In questo caso, i 'pagamenti' hanno bisogno della parola chiave' memoria'? –

Problemi correlati