首頁 > 後端開發 > C++ > 為什麼我的 C 程式碼會拋出「多重定義」錯誤?

為什麼我的 C 程式碼會拋出「多重定義」錯誤?

Linda Hamilton
發布: 2024-11-20 04:32:02
原創
492 人瀏覽過

Why Does My C   Code Throw a “Multiple Definition” Error?

多重定義錯誤:定義衝突的解決方案

在C 中,在頭檔中定義函數或類別並在來源檔案中實現它們時,開發人員可能會遇到“多重定義”錯誤。當多個翻譯單元(來源檔案)包含相同識別碼的定義時,就會出現此錯誤。

多重定義的原因

頭檔時出現「多重定義」錯誤包含定義包含在多個翻譯單元中。在以下情況下可能會發生這種情況:

  • 頭檔同時包含在原始檔及其對應的頭檔中。
  • 頭檔中提供了定義而不是聲明。

理解錯誤

考慮提供的程式碼範例:

// complex.h
class Complex
{
public:
   friend std::ostream& operator<<(std::ostream&, const Complex&);
};

// complex.cpp
std::ostream& operator<<(std::ostream&, const Complex&);
登入後複製

在此範例中,運算子

多重定義的解

多重定義錯誤的解法是:

  • 使用「inline」關鍵字: 透過將函數宣告為內聯,您可以允許多個翻譯單元提供定義而不會引起衝突。但是,內聯函數有一些限制,例如對大型函數的效能影響。
  • 將定義移到原始檔:而不是定義運算子

使用 inline 關鍵字或將定義移至來源檔案是避免多重定義錯誤的首選解決方案。

處理 real() 和

在程式碼範例中,real() 函數在complex.h 中聲明,但未定義。這就是編譯器不會為其報告多重定義錯誤的原因。類別聲明中宣告的成員函數是隱式內聯的,這意味著它們的定義被插入到包含標頭的所有翻譯單元中。對於運算符

以上是為什麼我的 C 程式碼會拋出「多重定義」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板