Rumah >pembangunan bahagian belakang >C++ >Bagaimana Pengisytiharan Hadapan Boleh Menyelesaikan Pekeliling #termasuk Masalah?

Bagaimana Pengisytiharan Hadapan Boleh Menyelesaikan Pekeliling #termasuk Masalah?

Patricia Arquette
Patricia Arquetteasal
2024-12-22 22:55:22377semak imbas

How Can Forward Declarations Solve Circular #include Problems?

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!

Kenyataan:
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