Rumah >pembangunan bahagian belakang >C++ >Bagaimana Pengisytiharan Hadapan Boleh Menyelesaikan Pekeliling #termasuk Masalah?
Sertakan Pengawal dan Pekeliling #termasuk: Memahami Mekanik Tersembunyi
Dalam kod anda, anda mengalami masalah penyusunan akibat pekeliling #termasuk antara kelas GameEvents, Fizik dan GameObject. Sertakan pengawal bertujuan untuk menghalang takrifan semula kelas apabila berbilang #termasuk berlaku. Walau bagaimanapun, mereka sahaja tidak dapat menyelesaikan isu asas.
Peranan Prapemproses
Prapemproses ialah alat yang beroperasi sebelum pengkompil untuk pramemproses kod, menyelesaikan makro tertentu dan # termasuk. #include ialah arahan yang pada asasnya menyalin kandungan fail lain ke dalam fail semasa. Ini bermakna apabila anda #include Physics.h dalam GameObject.h, kandungan Physics.h akan ditampal ke dalam GameObject.h.
Mentakrif dan Mentakrifkan Semula Nama
Jika kandungan fail yang disertakan mentakrifkan nama (cth., kelas atau pembolehubah), dan nama ini sudah ditakrifkan dalam fail semasa, kompilasi ralat berlaku. Itulah yang berlaku apabila anda #include Physics.h dalam GameObject.h, kerana Physics.h mentakrifkan kelas Physics, yang telah ditakrifkan dalam GameEvents.h.
Sertakan Pengawal: Penyelesaian Terhad
Sertakan pengawal seperti #ifndef PHYSICS_H dan #define FHYSICS_H membantu menghalang definisi semula dengan memastikan bahawa fail yang disertakan hanya diproses sekali. Walau bagaimanapun, mereka tidak menangani pekeliling #termasuk.
Gelung Pekeliling Termasuk
Dalam kes anda, #including Physics.h dalam GameObject.h mencetuskan kemasukan bulat . Prapemproses mencari GameObject.h dalam Physics.h, membawa kembali kepada #include asal Physics.h dalam GameObject.h. Ini mewujudkan gelung tak terhingga yang dikesan dan ditamatkan oleh pengkompil.
Pengisytiharan Hadapan: Memecah Pekeliling
Untuk menyelesaikan pekeliling, anda perlu menggunakan pengisytiharan hadapan. Pengisytiharan hadapan ialah pernyataan yang hanya mengisytiharkan kewujudan kelas atau jenis tanpa memberikan definisi penuhnya. Ini membolehkan anda merujuk jenis dalam pengisytiharan lain tanpa menguatkuasakan takrif segeranya.
Sebagai contoh, dalam Physics.h, anda boleh memajukan mengisytiharkan GameObject kelas seperti ini:
class GameObject;
Ini memberitahu preprocessor bahawa terdapat kelas yang dipanggil GameObject, tetapi definisinya belum tersedia. Apabila #including Physics.h dalam GameObject.h, pengisytiharan hadapan menghalang ralat definisi semula kerana pengkompil mengetahui bahawa GameObject telah diisytiharkan dan takrifannya akan diberikan kemudian.
Dengan menggunakan pengisytiharan hadapan, anda memecahkan pekeliling daripada #termasuk sementara masih membenarkan rujukan kepada kelas lain.
Atas ialah kandungan terperinci Bagaimana Pengisytiharan Hadapan Boleh Menyelesaikan Pekeliling #termasuk Masalah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!