Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Mendapat Ralat \'Simbol Luaran Tidak Selesai\' Semasa Menetapkan Medan Statik dalam C ?

Mengapa Saya Mendapat Ralat \'Simbol Luaran Tidak Selesai\' Semasa Menetapkan Medan Statik dalam C ?

Susan Sarandon
Lepaskan: 2024-11-01 01:35:28
asal
175 orang telah melayarinya

Why Am I Getting

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>
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan