Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Mendapat \"Ralat LNK2005: \"int k\" Sudah Ditakrifkan\" dalam Aplikasi Konsol Win32 Saya?

Mengapa Saya Mendapat \"Ralat LNK2005: \"int k\" Sudah Ditakrifkan\" dalam Aplikasi Konsol Win32 Saya?

DDD
DDDasal
2024-10-30 08:39:27920semak imbas

Why Am I Getting

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!

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