Memahami Ralat "Simbol Luaran Tidak Selesai" untuk Tugasan Medan Objek Statik
Apabila menulis kod, anda mungkin menghadapi situasi di mana anda perlu menetapkan nilai kepada medan objek statik dari kelas yang berbeza. Walau bagaimanapun, percubaan tugasan sedemikian boleh membawa kepada ralat pemautan dengan mesej "simbol luaran yang tidak dapat diselesaikan."
Pertimbangkan contoh kod yang dipermudahkan:
<code class="cpp">class A { public: A() {} }; class B { public: static A* a; }; int main() { B::a = new A; }</code>
Percubaan untuk menyusun kod ini akan mengakibatkan ralat:
error LNK2001: unresolved external symbol "public: static class A * B::a" (?a@B@@2PAVA@@A)
Ralat ini berlaku kerana medan objek statik tidak ditakrifkan secara tersirat dalam pengisytiharan kelasnya. Menurut piawai rujukan C, "Pengisytiharan ahli data statik di dalam definisi kelas bukanlah definisi dan mungkin jenis yang tidak lengkap."
Peraturan untuk Definisi Medan Objek Statik
Untuk menyelesaikan ralat ini, anda mesti mentakrifkan medan objek statik di luar definisi kelas secara eksplisit. Peraturan ini digunakan pada semua medan objek statik, tanpa mengira kebolehcapaian atau kebolehubahannya.
Contoh Definisi:
<code class="cpp">A* B::a = nullptr;</code>
Meletakkan definisi dalam skop ruang nama yang disertakan memastikan bahawa pemaut boleh mencari simbol apabila cuba menyelesaikan tugasan dalam main().
Atas ialah kandungan terperinci Bagaimanakah Saya Menyelesaikan Ralat \'Simbol Luaran Tidak Selesai\' Apabila Menetapkan kepada Medan Objek Statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!