Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat \'Rujukan Tidak Ditakrifkan\' Apabila Menggunakan Ahli Kelas Statik dalam C ?

Mengapa Saya Mendapat \'Rujukan Tidak Ditakrifkan\' Apabila Menggunakan Ahli Kelas Statik dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-11 03:07:08745semak imbas

Why Do I Get

Rujukan Tidak Ditakrifkan kepada Ahli Kelas Statik

Dalam C , ahli statik yang ditakrifkan dalam kelas memerlukan pengendalian yang betul untuk mengelakkan ralat penyusunan.

Sebab Undefined Rujukan

Ahli statik, walaupun diisytiharkan dalam definisi kelas, tidak ditakrifkan secara automatik melainkan dilakukan secara eksplisit di tempat lain. Ini kerana pengisytiharan berbeza daripada takrifan dalam C . Pengisytiharan hanya memperkenalkan ahli, manakala definisi memperuntukkan memori dan memberikan nilai awal.

Contoh

Pertimbangkan kelas berikut dengan ahli statik yang tidak diisytiharkan:

class Example {
    static bool exampleStaticMember;
};

Percubaan untuk menggunakan exampleStaticMember tanpa mentakrifkannya akan mengakibatkan "undefined references".

Keperluan Definisi

Untuk menyelesaikan isu ini, ahli statik mesti ditakrifkan secara eksplisit, biasanya dalam fail sumber (.cpp) yang mengandungi kelas takrifan. Takrifan hanya mengisytiharkan ahli sekali lagi dengan jenis datanya dan koma bertitik (';').

bool Example::exampleStaticMember;

Kes Khas

  • Const Ahli Statik Kamiran/Enumerasi: Ini boleh dimulakan dalam definisi kelas itu sendiri.
  • Ahli Templat Statik: Ahli statik templat kelas memerlukan definisi dalam fail pengepala.

Penggunaan Statik Lain

Perhatikan bahawa kata kunci statik mempunyai makna yang berbeza apabila digunakan di luar kelas:

  • Objek Statik dalam Fungsi: Mengisytiharkan objek yang mengekalkan nilainya antara panggilan fungsi.
  • Objek/Fungsi Statik dalam Skop Ruang Nama: Mengisytiharkan objek/fungsi dengan pautan dalaman.

Atas ialah kandungan terperinci Mengapa Saya Mendapat \'Rujukan Tidak Ditakrifkan\' Apabila Menggunakan Ahli Kelas Statik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn