Rumah > pembangunan bahagian belakang > C++ > Mengapa Fail Pengepala Saya Masih Menyebabkan Ralat Berbilang Definisi Walaupun Menggunakan Pengawal Sertakan?

Mengapa Fail Pengepala Saya Masih Menyebabkan Ralat Berbilang Definisi Walaupun Menggunakan Pengawal Sertakan?

DDD
Lepaskan: 2025-01-01 11:11:09
asal
296 orang telah melayarinya

Why Are My Header Files Still Causing Multiple Definition Errors Despite Using Include Guards?

Mengapa Kod Saya Tidak Dilindungi oleh Pengawal Sertakan?

Penyertaan Rekursif

Pengadang Sertakan berkesan untuk menghalang kemasukan rekursif bersama fail pengepala. Apabila memproses arahan #include, prapemproses menyemak definisi makro sedia ada sebelum menghuraikan kandungan pengepala. Jika makro sudah ditakrifkan, ia melangkau kandungan pengepala, dengan berkesan menghalang pengulangan.

Berbilang Definisi

Berbeza dengan kemasukan bersama, sertakan pengawal tidak direka bentuk untuk menghalang takrifan berbilang simbol. Apabila pengepala disertakan dalam berbilang unit terjemahan (fail .cpp berasingan), takrifan simbol akan direplikasi dalam setiap unit. Ini boleh membawa kepada ralat pemaut akibat pelanggaran Peraturan Satu Definisi dalam C .

Penyelesaian

Kemasukan Rekursif:
Ke hadapan mengisytiharkan kelas atau struktur data dalam fail pengepala untuk membenarkan kebergantungan tanpa saling kemasukan.

Berbilang Takrif:

  • Sebaris: Gunakan kata kunci sebaris untuk fungsi atau pembolehubah global yang ditakrifkan dalam fail pengepala yang disertakan dalam pelbagai unit terjemahan. Pengkompil akan cuba menyelaraskan fungsi di tapak panggilannya, mengelakkan berbilang takrifan simbol.
  • Pautan Dalaman: Gunakan ruang nama statik atau tidak dinamakan untuk memberikan simbol pautan dalaman, mengehadkan keterlihatannya kepada semasa unit terjemahan. Ini kurang diingini berbanding sebaris kerana ia boleh meningkatkan saiz boleh laku.

Atas ialah kandungan terperinci Mengapa Fail Pengepala Saya Masih Menyebabkan Ralat Berbilang Definisi Walaupun Menggunakan Pengawal Sertakan?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan