Solidity

ParserError:預期的主要表達式-應付地址-應付()

  • April 14, 2022

我正在努力讓自己熟悉乙太坊。所以我正在通過一個回購,並試圖朗姆酒程式碼:

function transferFundOnResolve(uint cid) private {
       // Could also be used: complainMap[cid]._status == Status.Resolved && 
       if(complainMap[cid]._reward > 0) {
           if(policeAccounts[complainSolver[cid]] != true) {
               complainSolver[cid].transfer( complainMap[cid]._reward );
               complainMap[cid]._reward = 0;
           }
           else {
               for(uint i=0; i<complainMap[cid]._contributors.length; i++) {
                   complainMap[cid]._contributors[i].transfer( complainMap[cid]._contAmount[i] );
               }
               complainMap[cid]._reward = 0;

           }
       }
   }

正如它所說的TypeError:“發送”和“轉移”僅適用於“應付地址”類型的對象,而不是“地址”。

所以我修改並添加了應付(),如:

function transferFundOnResolve(uint cid) private {
       // Could also be used: complainMap[cid]._status == Status.Resolved && 
       if(complainMap[cid]._reward > 0) {
           if(policeAccounts[complainSolver[cid]] != true) {
               complainSolver[cid].transfer( payable(complainMap[cid]._reward) );
               complainMap[cid]._reward = 0;
           }
           else {
               for(uint i=0; i<complainMap[cid]._contributors.length; i++) {
                   complainMap[cid]._contributors[i].transfer( payable(complainMap[cid]._contAmount[i]) );
               }
               complainMap[cid]._reward = 0;

           }
       }
   }

現在它說:ParserError:預期的主要表達式。

我應該如何解決這個問題?

我有pragma solidity ^0.5.16;

你得到這個錯誤的原因是沒有函式名payable接受一個整數值並返回payable地址。解析器無法辨識它並給您這樣的錯誤。

我不知道你的抱怨地圖結構,但我可以猜到它包含 contrivutor 變數,它的類型是地址。在大於 0.5.0 的solidity 版本中,他們添加了應付地址(您可以在此處查看更多資訊:“地址”和“應付地址”之間有什麼區別?)。轉移函式只能用於應付地址而不是地址,因此解決方案是將貢獻者的變數類型從地址更改為應付地址或將其轉換為應付地址。

引用自:https://ethereum.stackexchange.com/questions/84155