Solidity
將結構傳遞給函式會產生 TypeError: Internal or recursive type not allowed
我正在嘗試將 a 傳遞
struct
給契約的建構子,但出現錯誤TypeError: Internal or recursive type is not allowed for public or external functions
契約是
pragma solidity ^0.4.0; contract Writer { struct Paragraph { string[] lines; } struct Essay { Paragraph[] paragraphs; } Essay[] private essays; function Writer(Essay initialEssay) { essays.push(initialEssay); } }
我做了一些探勘,似乎問題實際上與
struct
契約中定義的內容無關(畢竟它會在哪裡定義)而是與嵌套數組有關,所以我將其更改為contract Writer { struct Paragraph { string sentances; } struct Essay { string title; Paragraph[] paragraphs; } Essay[] private essays; function Writer(Essay essay) { essays.push(essay); } }
但現在我明白了
InternalCompilerError: Static memory load of more than 32 bytes requested.
於是我嘗試了這種方式,手動建構
struct
.contract Writer { struct Paragraph { string sentances; } struct Essay { string title; Paragraph[] paragraphs; } Essay[] private essays; function Writer(string title, string[] _paras) { Paragraph[] storage paras; for (uint256 i = 0; i < _paras.length; i++) { Paragraph memory para = Paragraph(_paras[i]); paras.push(para); } Essay memory initialEssay = Essay(title, paras); essays.push(initialEssay); } }
這使
UnimplementedFeatureError: Nested arrays not yet implemented.
我是否應該放棄使用 a
struct
而是定義一個新契約來代表 aEssay
?
如果該函式是外部的,則不能將嵌套數組作為函式參數傳遞。當您嘗試傳遞 _paras 時,它將失敗,因為字元串
$$ $$是一個嵌套數組。 對於您的問題,最簡單的解決方案是,如果不是很多參數,只需將它們作為單獨的參數傳遞,在函式內部構造結構並將其推送到數組中。
這就像您嘗試的最後一個實現,而是 pos 傳遞字元串
$$ $$參數,您將傳遞字元串 param1、字元串 param2、字元串 param3 等。