Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengendalikan Ketergantungan Tajuk Pekeliling dalam C Apabila Kelas Merujuk Satu Sama Lain?

Bagaimana Mengendalikan Ketergantungan Tajuk Pekeliling dalam C Apabila Kelas Merujuk Satu Sama Lain?

Susan Sarandon
Susan Sarandonasal
2024-10-26 12:25:29400semak imbas

How to Handle Circular Header Dependencies in C   When Classes Reference Each Other?

Pengepala Termasuk Satu Sama Lain dalam C

Apabila mencipta kod dalam C di mana kelas merujuk antara satu sama lain, adalah penting untuk mengendalikan kemasukan pengepala dengan sewajarnya fail.

Sertakan Peletakan Penyata

Secara lalai, fail pengepala disertakan di dalam makro (#ifndef guards) untuk mengelakkan rekursi tak terhingga jika pengepala merujuk antara satu sama lain. Dalam contoh yang disediakan, meletakkan penyataan #include di dalam makro menyelesaikan isu di mana setiap kelas menyertakan pengepala kelas yang lain.

Pengisytiharan Hadapan

Dalam situasi yang diterangkan, pengkompil menemui definisi kelas B sebelum kelas A yang dirujuknya. Untuk menyelesaikan masalah ini, pengisytiharan hadapan A diperlukan sebelum definisi kelas B:

<code class="c++">class A;  // Declare A's existence</code>

Ini memberitahu pengkompil bahawa A ialah kelas, tanpa memerlukan definisi penuhnya pada ketika itu.

Kod Disemak

Berikut ialah kod yang disemak yang menggabungkan kedua-dua pengisytiharan hadapan dan kemasukan makro dalam:

<code class="c++">// A.h
#ifndef A_H_
#define A_H_

#include "B.h"

class A; // Forward declaration

class A
{
    private:
        B b;

    public:
        A() : b(*this) {}
};

#endif /*A_H_*/

// B.h
#ifndef B_H_
#define B_H_

#include "A.h"

class B
{
    private:
            A& a;

    public:
        B(A& a) : a(a) {}
 };

#endif /*B_H_*/</code>

Dengan mengikuti garis panduan ini, kelas boleh merujuk setiap lain dengan betul, ralat kompilasi evitando.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Ketergantungan Tajuk Pekeliling dalam C Apabila Kelas Merujuk Satu Sama Lain?. 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