錯誤:在 Solidity 0.4.11 上的函式參數列表中找不到記錄的參數“{uint”
我正在嘗試在最新的 Solidity 編譯器上編譯 Gav Wood 的錢包。看起來最新的 Solidity 編譯器對我不完全理解的程式碼有一些問題。我想知道如何修復程式碼或編譯過程。
我收到錯誤:
Error: Documented parameter "{uint" not found in the parameter list of the function. contracts/Wallet.sol:358:13: Warning: Return value of low-level calls not used. _to.call.value(_value)(_data); ^---------------------------^
相關程式碼為:
// first, take the opportunity to check that we're under the daily limit. if (underLimit(_value)) { SingleTransact(msg.sender, _value, _to, _data); // yes - just execute the call. _to.call.value(_value)(_data); return 0; }
此錯誤是指DocString 註釋(通常稱為NatSpec 格式註釋)中的Doxygen 標籤格式錯誤。
**如果您沒有正確格式化這些標籤值,Solidity 編譯器會“呻吟”**並且不會編譯(不幸的是,即使其餘程式碼是正確的!)。
解決您的問題
注意:你的問題真的很老,我找不到語法錯誤的原始原始碼。我將使用 Oleg Kondrahanov 程式碼範例的修改版本來解釋(同時刪除
constant
已棄用的關鍵字。您程式碼中的問題並非來自
_to.call.value(_value)(_data);
(這只是一個警告,您仍然可以使用 Solidity 中的警告進行編譯)。相反,問題來自您如何在 NatSpec 中使用 doxygen 標籤記錄參數。在您的情況下,您必須在
@param
標記後包含函式參數的名稱(而不是類型)。從這裡改變它:
/** * Calculate the current price for buy in amount. * * REPLACE THIS SECTION * | | * v v * @param {uint amount} Buy-in value in wei. */ function calculatePrice(uint amount) public pure returns (uint) { // Do something }
對此:
/** * Calculate the current price for buy in amount. * * WITH THIS * | | * v v * @param amount Buy-in value in wei. */ function calculatePrice(uint amount) public pure returns (uint) { // Do something }
所以在
@param
doxygen 標籤之後,你總是提到變數名(而不是@return
你提到變數類型的地方。所以格式是這樣的:/** * @param _charity The ethereum address of the charity you want to donate * @param _amount The amount in Wei to donate to the charity * @return bool returns true if success */ function donateEther(address _charity, uint _amount) public pure returns (bool) { // your code here }
什麼是 NatSpec 評論?
在以前的 Remix IDE 中,您可以通過顏色看到Standard Solidity 註釋 與 **Natspec 註釋之間的區別。**見下圖:
基本上,NatSpec 註釋用於兩個目的。當您通過 CLI 使用編譯器編譯 Solidity 合約時
solc
,您可以指定以下兩個標誌之一(或兩者),以生成兩個文件文件(JSON 格式):
solc <file_name.sol> --devdoc
: 生成開發者文件solc <file_name.sol> --userdoc
: 生成使用者文件請注意,這不會創建單獨的文件!但只需在 CLI 中以 JSON 格式輸出文件。請參閱Solidity 文件
可用的 Doxygen 標籤
Solidity 中可用的Doxygen 標籤包括
@title
、@author
、@notice
、@dev
和. 只有標籤可用於在 UI 上生成自定義消息(當使用者送出與智能合約互動時)。例子 :@param``@return``@notice
/// @notice Thank you for your donation, you are about to send `_value / 10**18` Ether to the charity address `_address`. /// @param _value The amount of ether you want to donate /// @param _charity The Ethereum address of the charity function donateEther(address _charity, uint _amount) external returns (bool) { // your code here }
假設我們將發送**
0.34 ethers
(目前 ≈ 10 美元)到 address0x7a84B6d2B1A1021df402437712AaE717472e829F
**的範例,當您發送交易時,上面的範常式式碼將在 UI 上生成如下消息:感謝您的捐贈,您即將向慈善地址**0x7a84B6d2B1A1021df402437712AaE717472e829F發送****0.34個乙太幣**