2016-03-02 13 views
5

Mam struct zakupu, w którym umieszczam tablicę płatności. Jednak przy próbie dodania nowej tablicy płatności w metodzie makePayment pojawia się błąd z kompilatora solidności: "Wewnętrzny błąd kompilatora: Kopiowanie typu struct Pamięć pamięci [] do pamięci nie jest jeszcze obsługiwana." Kiedy zmieniam tablicę maymentów na storage lub memory, pojawia się ten sam błąd. Dodałem odpowiedni kod poniżej.Jak zainicjować tablicę w strukturze struct

Czy można zrobić to, co staram się robić solidnie? Nie widzę niczego jawnie mówiącego, że nie jest to możliwe w dokumentacji, ale też nie widzę przykładów robienia tego, co próbuję zrobić. : |

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

Możliwe, że tak się stało, ponieważ nie wykorzystałem wystarczającej ilości gazu do transakcji. – unflores

+0

Czy widzisz, że istnieje [Ethereum SE beta] (http://ethereum.stackexchange.com/)? – default

Odpowiedz

6

Podczas ustawiania trzeba ręcznie zmienić długość tablicy płatności.

Albo zastosowanie:

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

Lub:

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

Ustawienie tablicy płatności w Purchase, zamiast tworzyć tablicę i próbuje ustawić go do Purchase.payments można wykonać następujące:

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)); 

Przedłużenie długości zakupów spowoduje automatyczne utworzenie nowego atrybutu es. Następnie możesz ustawić je ręcznie.

+0

Czy "płatności" potrzebują w tym przypadku słowa kluczowego "memory"? –

Powiązane problemy