Mengapakah \'Simbol Luaran Tidak Selesai\' Berlaku Apabila Menetapkan Medan Statik dalam C ?

DDD
Lepaskan: 2024-10-31 13:45:02
asal
780 orang telah melayarinya

Why Does

Simbol Luaran Tidak Selesai: Memahami Pengisytiharan Medan Statik

Apabila cuba menetapkan medan statik dalam satu kelas kepada nilai yang berbeza dari dalam utama kaedah, anda mungkin menghadapi ralat "simbol luaran tidak diselesaikan" (ralat LNK2001: simbol luaran tidak diselesaikan). Ini biasanya berlaku jika medan statik tidak dimulakan dengan betul di luar definisi kelas.

Menurut rujukan C, pengisytiharan ahli data statik di dalam definisi kelas dianggap sebagai pengisytiharan, bukan definisi. Untuk mentakrifkan medan statik, ia mesti diisytiharkan di luar definisi kelas, dalam skop ruang nama yang menyertakan definisi kelas.

Sebagai contoh, pertimbangkan kod berikut:

<code class="cpp">class A
{
public:
    A()
    {

    }
};

class B
{
public:
    static A* a;  // Declaration only
};

int main()
{
    B::a = new A;  // Error
}</code>
Salin selepas log masuk

Dalam kes ini , medan statik B::a diisytiharkan dalam definisi kelas, tetapi tidak ditakrifkan. Untuk menyelesaikan ralat ini, anda mesti mengalihkan takrif medan statik di luar takrifan kelas, seperti yang ditunjukkan di bawah:

<code class="cpp">class A
{
public:
    A()
    {

    }
};

class B
{
public:
};

// Static field definition outside the class
A* B::a = nullptr;

int main()
{
    B::a = new A;  // No error
}</code>
Salin selepas log masuk

Perubahan ini memastikan medan statik ditakrifkan dengan betul dan boleh digunakan dalam kaedah utama . Dengan mengikut Peraturan Satu Definisi, anda boleh menghalang ralat "simbol luaran yang tidak dapat diselesaikan" dan memastikan medan statik anda dipautkan dengan betul.

Atas ialah kandungan terperinci Mengapakah \'Simbol Luaran Tidak Selesai\' Berlaku Apabila Menetapkan Medan Statik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!