Memahami Ralat Penyusun: "Pemula Ahli Lalai Diperlukan Sebelum Tamat Kelas Terlampirnya"
Isu ini timbul apabila cuba mentakrifkan pemula ahli lalai untuk ahli kelas dalam fungsi yang menggunakan kelas itu sebagai nilai argumen lalai. Pengkompil seperti gcc dan clang menghadapi kesukaran dengan binaan ini, manakala msvc2017 mengendalikannya dengan jayanya.
Pertimbangkan coretan kod berikut:
<code class="cpp">class Downloader { public: struct Hints { int32_t numOfMaxEasyHandles = 8; }; static Downloader *Create(const Hints &hints = Hints()); };</code>
Kod yang disediakan bertujuan untuk menentukan nilai lalai untuk numOfMaxEasyHandles ahli struct Petunjuk, yang digunakan sebagai hujah lalai dalam fungsi Cipta. Walau bagaimanapun, gcc dan clang gagal untuk menyusun kod ini, mengeluarkan ralat:
default member initializer for 'Downloader::Hints::numOfMaxEasyHandles' required before the end of its enclosing class
Sebab Ralat
Ralat ini berlaku disebabkan oleh pepijat dalam gcc dan dentang yang berkaitan dengan pengendalian pemula ahli lalai dalam kelas yang digunakan sebagai argumen lalai dalam fungsi. Penyusun mengharapkan pemula ahli lalai ditakrifkan dalam definisi kelas itu sendiri, bukannya dalam badan fungsi.
Penyelesaian Kemungkinan
Untuk menyelesaikan isu ini, terdapat dua penyelesaian yang berpotensi:
Atas ialah kandungan terperinci Mengapakah GCC dan Clang Melemparkan \'Pemula Ahli Lalai Diperlukan\' Apabila Menggunakan Kelas sebagai Argumen Lalai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!