了解編譯器錯誤訊息:「在其封閉類別結束之前需要預設成員初始值設定項」
當遇到編譯器錯誤訊息時“在其封閉類別結束之前需要預設成員初始值設定項”,因此必須深入研究程式碼並了解根本問題。如果類別定義中缺少類別成員的預設成員初始值設定項,則會出現此錯誤。
編譯器行為:三個故事
有問題的程式碼,以Downloader 類別及其Hints 巢狀結構為特色,在編譯器之間表現出不同的行為。雖然 MSVC2017 可以成功編譯它,但 GCC8.2 和 Clang7.0 會引發上述錯誤。這種差異源自於 Hints 結構體缺少預設成員初始值設定項。
揭示根本原因
取消註解 Hints 結構體中的 Hints(){} 行解決了所有三個編譯器的問題。該行本質上提供了一個空構造函數,它滿足預設成員初始值設定項的要求。但是,取消註解 Hints() = default;使用 Clang 和 GCC 會導致編譯錯誤,但使用 MSVC 則不會。
Bug 一覽
此行為可歸因於 Clang 和 GCC 中的錯誤。錯誤報告 (https://bugs.llvm.org/show_bug.cgi?id=41303) 示範了類似的問題,並顯示了類似的錯誤訊息。報告表明,問題在於某些上下文中預設成員初始值設定項的延遲解析,導致編譯器誤解程式碼。
結論
避免此類編譯器錯誤,確保所有具有預設值的類別成員都在類別定義中定義了明確預設成員初始值設定項至關重要。這種做法可確保不同編譯器之間的編譯行為一致,並有助於防止程式碼開發過程中出現意外錯誤。
以上是為什麼我會收到「需要預設成員初始值設定項目」錯誤,我該怎麼辦?的詳細內容。更多資訊請關注PHP中文網其他相關文章!