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

DDD
Lepaskan: 2024-10-31 00:45:02
asal
851 orang telah melayarinya

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

Setelah disusun, ralat ditemui:

Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
Salin selepas log masuk

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

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

A.cpp

<code class="cpp">#include "A.h"
int k = 0;</code>
Salin selepas log masuk

B.cpp

<code class="cpp">#include "A.h"

// Use `k` within B.cpp</code>
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!