Rumah > pembangunan bahagian belakang > C++ > Mengapa Operator Lebih Muatan dalam Fail Pengepala Membawa kepada Ralat Berbilang Definisi?

Mengapa Operator Lebih Muatan dalam Fail Pengepala Membawa kepada Ralat Berbilang Definisi?

Mary-Kate Olsen
Lepaskan: 2024-11-19 05:06:02
asal
803 orang telah melayarinya

Why Does Operator Overloading in a Header File Lead to Multiple Definition Errors?

Berbilang Takrifan Lebihan Operator dalam Fail Pengepala

Dalam contoh kod yang disediakan, pengkompil menghadapi ralat definisi berganda untuk operator<< ; lebihan untuk kelas Kompleks. Walaupun melindungi fail pengepala dengan pengawal prapemproses, ralat ini timbul disebabkan oleh takrifan operator<< fungsi diletakkan di dalam pengepala.

Khususnya, baris std::ostream& operator<<(std::ostream& o, const Complex& Cplx) dalam fail pengepala bukan pengisytiharan, tetapi sebaliknya definisi. Akibatnya, apabila kedua-dua complex.cpp dan main.cpp menyertakan fail pengepala, pengkompil mengesan definisi pendua operator<< fungsi semasa memaut.

Tidak seperti fungsi ahli real(), yang secara tersirat sebaris dan oleh itu tidak terdedah kepada ralat definisi berbilang, operator<< beban berlebihan ditakrifkan secara eksplisit dalam fail pengepala. Oleh itu, ia mesti ditandakan secara eksplisit sebagai sebaris menggunakan kata kunci sebaris untuk membolehkan definisi berbilang.

inline std::ostream& operator<<(std::ostream& o, const Complex& Cplx) {
    return o << Cplx.m_Real << " i" << Cplx.m_Imaginary;
}
Salin selepas log masuk

Sebagai alternatif, takrifan operator<< beban berlebihan boleh dialihkan ke fail sumber complex.cpp untuk mengelakkan ralat definisi berganda. Dengan mengasingkan pengisytiharan dan definisi, pengkompil boleh mengendalikan rujukan kepada operator dengan betul<< berfungsi dalam main.cpp tanpa menemui pelbagai definisi.

Atas ialah kandungan terperinci Mengapa Operator Lebih Muatan dalam Fail Pengepala Membawa kepada Ralat Berbilang Definisi?. 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