Pekeliling #termasuk dan Ketidakberkesanan Termasuk Pengawal
Dalam senario yang melibatkan kebergantungan bulat, seperti dalam contoh yang disediakan di mana GameEvents, Physics, dan kelas GameObject saling bersambung, cuba untuk menguatkuasakan perintah dengan melaksanakan sertakan pengawal masuk pengepala boleh terbukti sia-sia.
Peranan Prapemproses
Untuk memahami isu ini, adalah penting untuk memahami fungsi prapemproses. Apabila menghadapi arahan #include, prapemproses bertindak sebagai penyunting teks, secara literal membenamkan kandungan fail pengepala yang ditentukan ke dalam fail semasa.
Masalah Pekeliling
Pertimbangkan coretan kod berikut:
// Physics.h #ifndef PHYSICS_H #define PHYSICS_H #include "GameObject.h" #endif // GameObject.h #include "Physics.h"
Setelah pramemproses kod ini, hasil berikut dijana:
// GameObject.h #ifndef PHYSICS_H #define PHYSICS_H #include "GameObject.h" #endif
Perhatikan cara arahan #include "GameObject.h" muncul dalam pengepala Physics.h. Ini secara berkesan membawa kepada gelung yang tidak berkesudahan, di mana prapemproses terus rekursif termasuk GameObject.h. Pengkompil biasanya menghalang gelung sedemikian, mengakibatkan kemasukan tidak lengkap pengepala yang diperlukan.
Menyelesaikan Kebergantungan Pekeliling
Untuk menyelesaikan isu ini, adalah penting untuk menghapuskan kebergantungan bulat. Satu pendekatan yang mungkin adalah menggunakan pengisytiharan hadapan, yang memaklumkan pengkompil tentang kewujudan kelas tanpa memberikan definisi lengkapnya. Sebagai contoh, dalam kes ini, kelas GameObject boleh diubah suai seperti berikut:
// GameObject.h class Physics; // Forward declaration class GameObject { Physics* physics; // Pointer to Physics object };
Pendekatan ini memastikan bahawa pengkompil mengetahui kelas Fizik tanpa memerlukan definisi lengkapnya, dengan berkesan memecahkan kebergantungan bulat.
Atas ialah kandungan terperinci Mengapa Termasuk Pengawal Gagal Mencegah Ralat dalam Pekeliling #include Dependencies?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!