理解編譯器錯誤:「在其封閉類別結束之前需要預設成員初始值設定項」
嘗試定義一個使用該類別作為預設參數值的函數中類別成員的預設成員初始值設定項。像 gcc 和 clang 這樣的編譯器在使用此構造時會遇到困難,而 msvc2017 可以成功處理它。
考慮以下程式碼片段:
<code class="cpp">class Downloader { public: struct Hints { int32_t numOfMaxEasyHandles = 8; }; static Downloader *Create(const Hints &hints = Hints()); };</code>
提供的程式碼旨在為 numOfMaxEasyHandles 定義預設值Hints 結構的成員,用作 Create 函數中的預設參數。但是,gcc 和clang 無法編譯此程式碼,並發出錯誤:
default member initializer for 'Downloader::Hints::numOfMaxEasyHandles' required before the end of its enclosing class
錯誤原因
此錯誤是由於gcc 和中的錯誤而發生的clang涉及類別中用作函數中預設參數的預設成員初始值設定項的處理。編譯器希望預設成員初始值設定項在類別定義本身中定義,而不是在函數體內定義。
可能的解決方法
要解決此問題,有兩種潛在的解決方法:
以上是為什麼在使用類別作為預設參數時,GCC 和 Clang 會拋出「需要預設成員初始值設定項目」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!