Ralat Takrif Berbilang: Penyelesaian kepada Takrifan Bercanggah
Dalam C , apabila mentakrifkan fungsi atau kelas dalam pengepala dan melaksanakannya dalam fail sumber, pembangun mungkin menghadapi ralat "takrif berbilang." Ralat ini timbul apabila berbilang unit terjemahan (fail sumber) mengandungi takrifan untuk pengecam yang sama.
Punca Takrifan Berbilang
Ralat "takrifan berbilang" berlaku apabila fail pengepala yang mengandungi takrifan disertakan dalam berbilang unit terjemahan. Ini boleh berlaku apabila:
Memahami Ralat
Pertimbangkan contoh kod yang disediakan:
// complex.h class Complex { public: friend std::ostream& operator<<(std::ostream&, const Complex&); }; // complex.cpp std::ostream& operator<<(std::ostream&, const Complex&);
Dalam contoh ini, takrifan operator << ; berada dalam complex.h dan bukannya complex.cpp. Ini boleh membawa kepada ralat takrifan berbilang kerana kedua-dua main.cpp dan complex.cpp akan cuba mentakrifkan << pengendali untuk kelas Kompleks.
Penyelesaian kepada Berbilang Definisi
Penyelesaian untuk ralat definisi berbilang ialah:
Menggunakan kata kunci sebaris atau mengalihkan definisi ke fail sumber ialah penyelesaian pilihan untuk mengelakkan ralat definisi berganda.
Perbezaan dalam Mengendalikan real() dan <<
Dalam sampel kod, fungsi real() diisytiharkan dalam complex.h, tetapi tidak ditakrifkan. Inilah sebabnya mengapa pengkompil tidak melaporkan ralat definisi berganda untuknya. Fungsi ahli yang diisytiharkan dalam pengisytiharan kelas adalah sebaris secara tersirat, bermakna takrifan mereka dimasukkan ke dalam semua unit terjemahan yang termasuk pengepala. Ini tidak berlaku untuk pengendali << fungsi, yang ditakrifkan dalam kompleks.h.
Atas ialah kandungan terperinci Mengapa Kod C Saya Membuang Ralat 'Berbilang Definisi'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!