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; }
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!