首頁 > 後端開發 > C++ > 為什麼在頭檔中定義函數會導致 C 中的「多重定義」錯誤?

為什麼在頭檔中定義函數會導致 C 中的「多重定義」錯誤?

Linda Hamilton
發布: 2024-11-19 07:00:03
原創
968 人瀏覽過

Why Does Defining a Function in a Header File Cause a

為什麼要在頭檔中多重定義符號?

當嘗試編譯具有多個頭檔的 C 程式時,可能會遇到錯誤「多重定義 [符號」 ]。 「當相同符號(例如函數或變數)在程式碼中定義多次時,就會出現此錯誤。

請考慮以下範例:

// complex.h
#ifndef COMPLEX_H
#define COMPLEX_H
#include <iostream>

class Complex {
public:
   Complex(float Real, float Imaginary);
   float real() const { return m_Real; };

private:
   friend std::ostream&amp; operator<<(std::ostream&amp; o, const Complex&amp; Cplx);

   float m_Real;
   float m_Imaginary;
};
#endif // COMPLEX_H

// complex.cpp
#include "complex.h"

Complex::Complex(float Real, float Imaginary) {
   m_Real = Real;
   m_Imaginary = Imaginary;
}
登入後複製
// operator.cpp
#include "complex.h"

std::ostream&amp; operator<<(std::ostream&amp; o, const Complex&amp; Cplx) {
   return o << Cplx.m_Real << " i" << Cplx.m_Imaginary;
}
登入後複製
// main.cpp
#include "complex.h"
#include <iostream>

int main() {
   Complex Foo(3.4, 4.5);
   std::cout << Foo << "\n";
   return 0;
}
登入後複製

編譯此程式碼將導致上述錯誤。中的定義不是內聯的。式內聯的,非成員函數如operator

行動運算子
  • 透過內聯函數或將其定義放在實作檔案中,可以避免多重定義錯誤,確保程式編譯成功。

    以上是為什麼在頭檔中定義函數會導致 C 中的「多重定義」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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