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
Lepaskan: 2024-10-31 06:33:02
asal
874 orang telah melayarinya

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

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

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!

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