Rumah > Artikel > pembangunan bahagian belakang > Mengapa Saya Mendapat Ralat \"Simbol Luaran Tidak Selesai\" Semasa Menetapkan Medan Statik dalam C ?
Simbol Luaran Tidak Selesai untuk Medan Objek Statik
Artikel ini menyiasat mesej ralat "ralat LNK2001: simbol luaran tidak diselesaikan" yang ditemui semasa cuba menetapkan medan statik dalam kelas daripada kaedah utama.
Dalam coretan kod yang disediakan, pengisytiharan medan statik "a" dalam kelas "B" berlaku dalam definisi kelas itu sendiri. Walau bagaimanapun, menurut piawaian C, pengisytiharan sedemikian tidak dianggap sebagai takrifan. Untuk ahli data statik, takrifan yang betul mesti muncul di luar kelas dalam skop ruang nama yang dilampirkan, menggunakan pengendali "::".
Peraturan yang mengawal keperluan ini dikenali sebagai Peraturan Satu Definisi (ODR), yang memberi mandat bahawa setiap entiti (termasuk ahli data statik) mempunyai definisi unik tunggal dalam keseluruhan program. Peraturan ini memastikan bahawa tiada kesamaran mengenai nilai ahli statik.
Oleh itu, untuk menyelesaikan ralat, kod tersebut hendaklah diubah suai seperti berikut, dengan "a" ditakrifkan dalam skop ruang nama:
<code class="cpp">class A { public: A() { } }; class B { public: static A* a; }; A* B::a; // Definition in namespace scope int main() { B::a = new A; }</code>
Dengan mentakrifkan ahli statik di luar kelas secara eksplisit, pemaut boleh menyelesaikan rujukan simbol dengan betul dan kod akan berjaya dikompil.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \"Simbol Luaran Tidak Selesai\" Semasa Menetapkan Medan Statik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!