Ralat Simbol Luaran Tidak Selesai: Menetapkan Medan Statik daripada Kaedah Utama
Apabila cuba mengemas kini medan statik dalam kelas daripada kaedah utama, pembangun mungkin menghadapi ralat "LNK2001: simbol luaran yang tidak dapat diselesaikan." Ralat ini berlaku kerana peraturan tertentu yang memerlukan ahli kelas statik ditakrifkan di luar definisi kelas untuk pemautan yang betul.
Pertimbangkan kod berikut:
<code class="cpp">class A { public: A() { /* Implementation */ } }; class B { public: static A* a; }; int main() { B::a = new A; // Attempting to set the static field }</code>
Dalam kod ini, kami cuba untuk menetapkan medan statik a kelas B kepada objek A baharu daripada kaedah utama. Walau bagaimanapun, pengkompil akan membuang ralat "LNK2001" kerana takrifan a tiada.
Menurut piawaian C, pengisytiharan ahli data statik dalam definisi kelas tidak dianggap sebagai takrifan. Sebaliknya, takrifan mesti disediakan di luar kelas dalam skop ruang nama menggunakan nama kelas dan :: operator. Berikut ialah kod yang diperbetulkan:
<code class="cpp">class A { public: A() { /* Implementation */ } }; class B { public: static A* a; // Declaration }; // Definition of static field outside the class A* B::a; int main() { B::a = new A; // Setting the static field }</code>
Dengan mentakrifkan di luar kelas, pengkompil boleh memautkan simbol dengan betul dan membenarkan medan statik diubah suai daripada kaedah utama.
Atas ialah kandungan terperinci Mengapa Menetapkan Medan Statik daripada Kaedah Utama Menyebabkan Ralat 'Simbol Luaran Tidak Selesai'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!