Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah \"Simbol Luaran Tidak Selesai\" Berlaku Apabila Menetapkan Medan Statik dalam C ?

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

DDD
DDDasal
2024-10-31 13:45:02782semak imbas

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>

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>

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!

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