Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah saya mendapat ralat \"ralat LNK2005: sudah ditakrifkan?\" apabila saya mentakrifkan pembolehubah yang sama dalam berbilang fail C?

Mengapakah saya mendapat ralat \"ralat LNK2005: sudah ditakrifkan?\" apabila saya mentakrifkan pembolehubah yang sama dalam berbilang fail C?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 01:43:29766semak imbas

Why am I getting the

Ralat: "ralat LNK2005: sudah ditentukan?"

Dalam aplikasi konsol anda, anda telah mengalami ralat yang tidak dijangka semasa menyusun fail A.cpp dan B.cpp . Kedua-dua fail mengandungi kod berikut:

#include "stdafx.h"
int k;

Walau bagaimanapun, proses penyusunan menghasilkan ralat:

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

Ralat ini berpunca daripada pelanggaran "peraturan satu definisi." Dalam C , setiap pembolehubah, fungsi dan objek hanya boleh ditakrifkan sekali. Dalam kes anda, anda telah menentukan pembolehubah "k" dalam kedua-dua A.cpp dan B.cpp.

Penyelesaian

Menggunakan Ruang Nama Tanpa Nama

Jika anda mahu untuk menggunakan pembolehubah bernama yang sama dalam kedua-dua fail, anda boleh menggunakan ruang nama tanpa nama (ruang nama tanpa nama) untuk mengelakkan konflik.

namespace
{
    int k;
}

Dengan merangkum "k" dalam ruang nama, anda mengehadkan skopnya dengan berkesan kepada fail masing-masing, menghalang ralat definisi.

Menggunakan Perisytiharan Luaran

Jika anda berhasrat untuk berkongsi pembolehubah "k" merentas berbilang fail, anda boleh menggunakan teknik pengisytiharan dan definisi luaran:

A.h (fail pengepala)

extern int k;

A.cpp

#include "A.h"
int k = 0;

B.cpp

#include "A.h"

// Use 'k' variable as needed

Dalam senario ini, anda mengisytiharkan pembolehubah sebagai luaran dalam A.h dan mentakrifkannya dalam A.cpp. Fail B.cpp hanya perlu memasukkan A.h untuk mengakses pembolehubah, mengelakkan konflik definisi.

Atas ialah kandungan terperinci Mengapakah saya mendapat ralat \"ralat LNK2005: sudah ditakrifkan?\" apabila saya mentakrifkan pembolehubah yang sama dalam berbilang fail C?. 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