Rumah >pembangunan bahagian belakang >C++ >Mengapakah saya mendapat ralat \'Ralat LNK2005: Definisi Berbilang\' dalam aplikasi konsol Win32 saya?

Mengapakah saya mendapat ralat \'Ralat LNK2005: Definisi Berbilang\' dalam aplikasi konsol Win32 saya?

DDD
DDDasal
2024-10-31 00:45:02933semak imbas

Why am I getting the

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!

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