Sertakan Pengawal dan Kebergantungan Pekeliling dalam C
Isu anda timbul daripada pekeliling #include dependencies dalam kod anda. Dalam persediaan anda, Physics.h termasuk GameObject.h dan GameObject.h perlu memasukkan Physics.h untuk mengakses kelas Fizik.
Cara Prapemproses Mengendalikan #include
Preprocessors memproses #include statement dengan menyalin secara fizikal kandungan fail yang disertakan ke dalam fail semasa. Dalam kes anda:
Mengapa Termasuk Pengawal Gagal
Sertakan pengawal tidak berkesan dalam mencegah kebergantungan bulat. Pertimbangkan kod berikut:
// Physics.h #ifndef PHYSICS_H #define PHYSICS_H #include "GameObject.h" #endif
Apabila prapemproses memproses kod ini, GameObject.h akan disalin ke dalam Physics.h. Walau bagaimanapun, prapemproses tidak mengetahui tentang rujukan bulat dan melaksanakan baris #include dalam kandungan salinan GameObject, yang cuba memasukkan Physics.h (sudah disertakan). Ini membawa kepada ralat masa kompilasi.
Menyelesaikan Ketergantungan Pekeliling
Untuk menyelesaikan kebergantungan bulat, pengisytiharan hadapan boleh digunakan. Dalam kes anda:
Fizik.h
class Physics; // Forward declaration class GameObject { // ... Physics* physics; // Pointer to Physics object // ... };
GameObject.h
#include "Physics.h" class GameObject { // ... Physics physics; // Actual object declaration // ... };
Dengan menggunakan hadapan pengisytiharan dalam Physics.h dan mengisytiharkan objek sebenar dalam GameObject.h, pengkompil boleh memisahkan definisi ini kelas. Mula-mula ia boleh memproses pengisytiharan hadapan dalam Physics.h, dan kemudian memproses definisi objek sebenar dalam GameObject.h, mengelakkan sebarang isu pekeliling.
Atas ialah kandungan terperinci Bagaimana Termasuk Pengawal Gagal Mencegah Ketergantungan Pekeliling dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!