Rumah > pembangunan bahagian belakang > C++ > Bagaimana Saya Boleh Menyelesaikan Pekeliling #include Dependencies dalam Fail Pengepala?

Bagaimana Saya Boleh Menyelesaikan Pekeliling #include Dependencies dalam Fail Pengepala?

DDD
Lepaskan: 2024-12-19 22:48:10
asal
478 orang telah melayarinya

How Can I Resolve Circular #include Dependencies in Header Files?

Memahami Pekeliling #include Dependencies

Apabila berurusan dengan fail pengepala yang mempunyai kebergantungan bulat, seperti dalam kes GameEvents, Fizik dan GameObject, adalah penting untuk menghalang definisi semula kelas sambil membenarkan akses kepada yang diperlukan pengepala.

Isu dengan #include Tidak Dilindungi

Memasukkan "Physics.h" dalam "GameObject.h" tanpa sebarang perlindungan membawa kepada ralat definisi semula kerana "GameObject. h" sudah termasuk "Physics.h" melalui "GameEvents.h." Takrifan semula ini berlaku apabila prapemproses menyalin-tampal kod "Physics.h" ke dalam "GameObject.h."

Memperkenalkan Pengawal Sertakan

Sertakan pengawal ialah makro yang mengelakkan kemasukan pendua fail pengepala. Apabila fail pengepala disertakan dua kali, pengawal sertakan akan menghalang salinan kedua daripada disertakan. Ini menyelesaikan isu takrifan semula.

Perils of Nested #include

Dalam kes ini, graf kebergantungan adalah bulat. "GameEvents.h" termasuk "Physics.h" dan "Physics.h" termasuk "GameObject.h," mencipta gelung. Kebergantungan bulat ini menyebabkan masalah kerana penyataan #include diulang tanpa had, mengakibatkan penyimpangan kod yang berlebihan.

Penyelesaian: Pengisytiharan Hadapan

Untuk menyelesaikan kebergantungan bulat, gunakan ke hadapan pengisytiharan. Pengisytiharan hadapan memberitahu pengkompil bahawa kelas tertentu wujud, tanpa memberikan definisi lengkapnya. Dengan mengisytiharkan "Fizik" ke hadapan dalam "GameEvents.h" dan "GameObject.h," fail pengepala boleh mengakses satu sama lain tanpa benar-benar menyertakan kod satu sama lain:

// GameEvents.h
class GameObject;
class Physics;
Salin selepas log masuk
// Physics.h
#include <list>

class GameObject;

class Physics
{
public:
    void ApplyPhysics(GameObject*);
    // ...
};
Salin selepas log masuk
// GameObject.h
class GameObject
{
public:
    GameObject(Vector2X position);
    // ...
};
Salin selepas log masuk

Dengan cara ini , fail pengepala boleh mengakses jenis dan fungsi yang diperlukan tanpa menghadapi isu definisi semula atau kebergantungan bulat.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Menyelesaikan Pekeliling #include Dependencies dalam Fail Pengepala?. 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