Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Mendapat Ralat LNK2005: Berbilang Takrifan \'k\' dalam Aplikasi Konsol Win32 Saya?

Mengapa Saya Mendapat Ralat LNK2005: Berbilang Takrifan \'k\' dalam Aplikasi Konsol Win32 Saya?

Susan Sarandon
Susan Sarandonasal
2024-11-01 00:19:28424semak imbas

Why Am I Getting Error LNK2005: Multiple Definitions of 'k' in My Win32 Console Application?

Ralat LNK2005: Berbilang Takrif 'k'

Apabila membangunkan aplikasi konsol Win32 dengan berbilang fail sumber C, anda mungkin menghadapi ralat LNK2005 , menunjukkan bahawa pembolehubah telah ditakrifkan beberapa kali.

Punca Ralat

Dalam kod yang diberikan, kedua-dua A.cpp dan B.cpp mentakrifkan pembolehubah global bernama 'k'. Ini melanggar peraturan definisi C one, yang menyatakan bahawa setiap simbol (fungsi, pembolehubah, dll.) mesti ditakrifkan sekali sahaja dalam program.

Menyelesaikan Isu

Terdapat beberapa cara untuk menyelesaikan ralat ini:

1. Menggunakan Ruang Nama Tanpa Nama (untuk Pembolehubah Diperlukan dalam Berbilang Fail)

Jika anda memerlukan pembolehubah yang sama dalam kedua-dua fail cpp, gunakan ruang nama tanpa nama untuk mengelakkan berbilang definisi:

<code class="cpp">namespace
{
    int k;
}</code>

2. Menggunakan 'luaran' (untuk Pembolehubah Dikongsi Merentas Fail)

Jika anda perlu berkongsi pembolehubah merentas berbilang fail, isytiharkan pembolehubah itu sebagai 'luaran' dalam fail pengepala dan takrifkannya dalam satu fail cpp sahaja :

<code class="cpp">// A.h
extern int k;

// A.cpp
int k = 0;

// B.cpp
#include "A.h"

// Use `k` anywhere in B.cpp</code>

Dengan mengikuti pendekatan ini, anda boleh menyelesaikan ralat LNK2005 dan memastikan bahawa setiap simbol ditakrifkan sekali sahaja dalam program anda.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat LNK2005: Berbilang Takrifan \'k\' 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