Memahami Jenis Tidak Lengkap dalam Kelas
Dalam C , mengisytiharkan ahli kelas daripada jenis yang sama dengan kelas itu sendiri boleh membawa kepada "tidak lengkap ralat taip". Pertimbangkan contoh berikut:
class A { private: A member; };
Mengapa kod ini gagal disusun?
Alasannya terletak pada susunan pengisytiharan dan definisi. Apabila ahli ahli A diisytiharkan dalam kelas, pengkompil belum mentakrifkan kelas A sepenuhnya. Akibatnya, jenis A tidak lengkap.
Walau bagaimanapun, jika penunjuk kepada kelas digunakan sebaliknya, pengkompil boleh mengecam A* sebagai "penunjuk kepada jenis A" walaupun A tidak ditakrifkan sepenuhnya. Ini kerana pengkompil mengetahui bahawa penuding adalah jenis yang sah.
Untuk menyelesaikan ralat "jenis tidak lengkap", satu penyelesaian ialah menggunakan penunjuk pintar, seperti boost::shared_ptr ahli, untuk mewakili rujukan ahli. Penunjuk pintar boleh mengurus memori secara automatik dan mengelakkan kerumitan pengendalian penunjuk manual.
Pendekatan lain ialah mengisytiharkan hadapan kelas dalam perisytiharan ahli, seperti:
class A; class A { private: A* member; };
Ini membolehkan pengkompil untuk mengetahui bahawa A ialah jenis kelas yang sah, walaupun ia belum ditakrifkan sepenuhnya.
Memahami jenis yang tidak lengkap adalah penting dalam pengaturcaraan C, kerana ia mempengaruhi susunan kelas dan ahlinya ditakrifkan . Penunjuk atau penunjuk pintar boleh digunakan sebagai penyelesaian apabila berurusan dengan ahli jenis rekursif.
Atas ialah kandungan terperinci Mengapa Mengisytiharkan Ahli Kelas Jenis Yang Sama Menyebabkan Ralat \'Jenis Tidak Lengkap\' dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!