Ralat LNK2005: "int k" Sudah Ditakrifkan
Apabila memautkan aplikasi konsol Win32 dengan berbilang fail C, ralat "ralat LNK2005: "int k" (?a@@3HA) yang telah ditakrifkan dalam A.obj" mungkin timbul. Ralat ini berlaku apabila pembolehubah dengan nama yang sama ditakrifkan dalam berbilang fail.
Dalam contoh yang diberikan, kedua-dua A.cpp dan B.cpp mentakrifkan pembolehubah k. Mengikut peraturan satu definisi, setiap pembolehubah atau fungsi global mesti mempunyai definisi tunggal. Mempunyai pelbagai takrifan membawa kepada kekaburan dan ralat pautan.
Penyelesaian:
Untuk menyelesaikan ralat ini, anda boleh menggunakan pendekatan berikut:
Gunakan Ruang Nama Tanpa Nama (Ruang Nama Tanpa Nama):
Jika pembolehubah k bertujuan untuk menjadi peribadi kepada setiap fail, gunakan ruang nama tanpa nama untuk mengelakkan perlanggaran nama simbol.
<code class="cpp">namespace { int k; }</code>
Ini mengasingkan simbol k dalam setiap fail, menghalang fail lain daripada mengakses atau mentakrifkannya semula.
Isytihar dan Takrif Pembolehubah dalam Fail Asing:
Jika anda perlu berkongsi pembolehubah k merentas berbilang fail, gunakan extern untuk mengisytiharkannya dalam fail pengepala dan mentakrifkannya dalam unit kompilasi yang berasingan.
A.h
<code class="cpp">extern int k;</code>
A.cpp
<code class="cpp">#include "A.h" int k = 0;</code>
B.cpp
<code class="cpp">#include "A.h" // Use `k` anywhere in the file</code>
Dengan mengisytiharkan k sebagai extern dalam fail pengepala, fail lain boleh mengakses dan menggunakannya tanpa mentakrifkannya semula.
Atas ialah kandungan terperinci Mengapa Saya Mendapat \'Ralat LNK2005: \'int k\' Sudah Ditakrifkan\' dalam Aplikasi Konsol Win32 Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!