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!