Ralat LNK2005: Takrif Berbilang
Dalam aplikasi konsol Win32, anda mempunyai dua fail sumber, A.cpp dan B.cpp, setiap satu mengandungi kod berikut:
<code class="cpp">#include "stdafx.h" int k;</code>
Setelah disusun, ralat ditemui:
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
Penjelasan:
Ralat ini berpunca daripada pelanggaran peraturan satu definisi. Dalam C , setiap pembolehubah atau fungsi global hanya boleh mempunyai definisi tunggal merentas semua unit terjemahan (fail sumber). Dalam kes anda, kedua-dua A.cpp dan B.cpp mentakrifkan pembolehubah k, yang membawa kepada pelbagai takrifan dan ralat pemautan.
Penyelesaian:
Untuk menyelesaikan isu ini , pertimbangkan pilihan berikut:
1. Menggunakan Ruang Nama Tanpa Nama:
Jika anda memerlukan pembolehubah k digunakan dalam kedua-dua A.cpp dan B.cpp tetapi ingin mengelakkan pautan luaran, anda boleh menggunakan ruang nama tanpa nama:
<code class="cpp">namespace { int k; }</code>
2. Menggunakan extern:
Jika anda perlu berkongsi pembolehubah k merentas berbilang fail, anda harus mengisytiharkannya sebagai extern dalam fail pengepala (A.h) dan mentakrifkannya dalam satu fail sumber (cth., A.cpp ):
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` within B.cpp</code>
Dengan mengikuti penyelesaian ini, anda boleh mengelakkan berbilang takrifan k dan berjaya menyusun aplikasi anda.
Atas ialah kandungan terperinci Mengapakah saya mendapat ralat \'Ralat LNK2005: Definisi Berbilang\' dalam aplikasi konsol Win32 saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!