Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat \'Rujukan Tidak Ditakrifkan\' dengan Ahli Statik dalam C ?

Mengapa Saya Mendapat Ralat \'Rujukan Tidak Ditakrifkan\' dengan Ahli Statik dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 22:27:13437semak imbas

Why Am I Getting

Rujukan Tidak Ditakrifkan kepada Ahli Statik: Panduan Pemula

Ahli data statik sering digunakan untuk berkongsi maklumat merentas kejadian kelas. Walau bagaimanapun, pembangun kadangkala menghadapi ralat "rujukan tidak ditentukan" apabila menggunakan ahli data statik. Isu ini timbul disebabkan oleh perbezaan antara pengisytiharan dan takrifan.

Memahami Pengisytiharan dan Takrifan

Satu pengisytiharan memperkenalkan kewujudan pembolehubah kepada pengkompil tanpa menyatakan lokasi memorinya. Definisi, sebaliknya, memperuntukkan memori untuk pembolehubah dan memberikan alamatnya.

Dalam kes ahli data statik, pengisytiharan mereka berlaku dalam definisi kelas tetapi tidak memberikan mereka alamat. Takrifan sebenar mesti disediakan secara berasingan.

Menentukan Ahli Data Statik

Untuk menyelesaikan ralat "rujukan tidak ditentukan", tentukan secara eksplisit ahli data statik di luar definisi kelas, biasanya dalam fail pelaksanaan (.cpp). Sebagai contoh, pertimbangkan kod berikut:

// Header file (.h)
class Example {
    static bool exampleStaticMember;
};

// Implementation file (.cpp)
bool Example::exampleStaticMember;

Pengecualian untuk Jenis Kamiran dan Penghitungan

Ahli data statik jenis kamiran atau penghitungan boleh dimulakan terus dalam kelas definisi:

class Example {
    static const int initialized = 15;
};

Dalam kes ini, takrifan dalam fail pelaksanaan mesti meninggalkan pemula:

const int Example::initialized;

Ahli Data Statik dalam Templat

Untuk templat, ahli data statik ditakrifkan dalam fail pengepala bersama-sama dengan pengisytiharan kelas. Pengecualian kepada Peraturan Satu Definisi membenarkan berbilang takrifan ahli data statik templat kelas.

Kegunaan "statik" Lain

Di luar skop kelas, "statik" mempunyai makna tambahan:

  • Dalam skop fungsi, ia mencipta objek berterusan yang mengekalkan nilainya merentas fungsi panggilan.
  • Pada skop ruang nama, ia mengisytiharkan objek dan fungsi dengan pautan dalaman, walaupun penggunaan ini tidak digalakkan untuk objek.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'Rujukan Tidak Ditakrifkan\' dengan Ahli 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