首頁  >  文章  >  後端開發  >  當我在多個 C 檔案中定義相同的變數時,為什麼會收到「錯誤 LNK2005:已定義?」錯誤?

當我在多個 C 檔案中定義相同的變數時,為什麼會收到「錯誤 LNK2005:已定義?」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-10-30 01:43:29766瀏覽

Why am I getting the

錯誤:「錯誤 LNK2005:已定義?」

在控制台應用程式中,編譯檔案 A.cpp 和 B.cpp 時遇到意外錯誤。這兩個檔案都包含以下程式碼:

#include "stdafx.h"
int k;

但是,編譯過程會產生錯誤:

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

此錯誤源自於違反「單一定義規則」。在 C 中,每個變數、函數和物件只能定義一次。在您的例子中,您已經在 A.cpp 和 B.cpp 中定義了變數「k」。

解決方案

使用無名命名空間

如果您願意要在兩個檔案中使用相同的命名變量,可以利用無名命名空間(匿名命名空間)來避免衝突。

namespace
{
    int k;
}

透過將「k」封裝在命名空間中,可以有效地將其範圍限制為

使用外部聲明

如果您打算在多個文件之間共用「k」變量,您可以採用外部聲明和定義的技術:

A.h(頭檔)

extern int k;

A.cpp

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

B.cpp

#include "A.h"

// Use 'k' variable as needed

在這種情況下,您在A.h 中將變數宣告為外部變量,並在A .cpp 中定義它。 B.cpp檔案只需要包含A.h即可存取變量,避免定義衝突。

以上是當我在多個 C 檔案中定義相同的變數時,為什麼會收到「錯誤 LNK2005:已定義?」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn