Rumah >pembangunan bahagian belakang >C++ >Mengapa Menetapkan Medan Statik daripada Kaedah Utama Menyebabkan Ralat \'Simbol Luaran Tidak Selesai\'?

Mengapa Menetapkan Medan Statik daripada Kaedah Utama Menyebabkan Ralat \'Simbol Luaran Tidak Selesai\'?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 06:33:02889semak imbas

Why Does Setting a Static Field from the Main Method Cause an

Ralat Simbol Luaran Tidak Selesai: Menetapkan Medan Statik daripada Kaedah Utama

Apabila cuba mengemas kini medan statik dalam kelas daripada kaedah utama, pembangun mungkin menghadapi ralat "LNK2001: simbol luaran yang tidak dapat diselesaikan." Ralat ini berlaku kerana peraturan tertentu yang memerlukan ahli kelas statik ditakrifkan di luar definisi kelas untuk pemautan yang betul.

Pertimbangkan kod berikut:

<code class="cpp">class A
{
public:
    A() { /* Implementation */ }
};

class B
{
public:
    static A* a;
};

int main()
{
    B::a = new A; // Attempting to set the static field
}</code>

Dalam kod ini, kami cuba untuk menetapkan medan statik a kelas B kepada objek A baharu daripada kaedah utama. Walau bagaimanapun, pengkompil akan membuang ralat "LNK2001" kerana takrifan a tiada.

Menurut piawaian C, pengisytiharan ahli data statik dalam definisi kelas tidak dianggap sebagai takrifan. Sebaliknya, takrifan mesti disediakan di luar kelas dalam skop ruang nama menggunakan nama kelas dan :: operator. Berikut ialah kod yang diperbetulkan:

<code class="cpp">class A
{
public:
    A() { /* Implementation */ }
};

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

// Definition of static field outside the class
A* B::a;

int main()
{
    B::a = new A; // Setting the static field
}</code>

Dengan mentakrifkan di luar kelas, pengkompil boleh memautkan simbol dengan betul dan membenarkan medan statik diubah suai daripada kaedah utama.

Atas ialah kandungan terperinci Mengapa Menetapkan Medan Statik daripada Kaedah Utama Menyebabkan Ralat 'Simbol Luaran Tidak Selesai'?. 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