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

Patricia Arquette
Lepaskan: 2024-10-30 01:43:29
asal
836 orang telah melayarinya

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

Walau bagaimanapun, proses penyusunan menghasilkan ralat:

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

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

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

A.cpp

#include "A.h"
int k = 0;
Salin selepas log masuk

B.cpp

#include "A.h"

// Use 'k' variable as needed
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan