Rumah >pembangunan bahagian belakang >C++ >Mengapa Mentakrifkan Ahli Kelas Jenis Yang Sama Menghasilkan Ralat \'Jenis Tidak Lengkap\'?

Mengapa Mentakrifkan Ahli Kelas Jenis Yang Sama Menghasilkan Ralat \'Jenis Tidak Lengkap\'?

Linda Hamilton
Linda Hamiltonasal
2024-11-19 12:41:03920semak imbas

Why Does Defining a Class Member of the Same Type Result in an

Jenis Tidak Lengkap dalam Struktur Kelas

Merangkum objek dalam diri mereka boleh menjadi corak reka bentuk yang berguna, tetapi ralat biasa timbul apabila cuba mentakrifkan kelas dengan ahli yang sama jenis. Pertimbangkan contoh berikut:

class A {
    private:
        A member;
}

Setelah disusun, ralat "jenis tidak lengkap" ditemui. Ini kerana, apabila mentakrifkan pembolehubah ahli, kelas A itu sendiri masih dalam proses ditakrifkan, menjadikan jenisnya tidak ditentukan.

Walau bagaimanapun, menggunakan penuding kepada jenis kelas mengelakkan isu ini:

class A {
    private:
        A* member;
}

Ini kerana, pada masa penuding diisytiharkan, pengkompil mengiktiraf A sebagai nama kelas yang sah, membenarkan "penunjuk ke Jenis A" untuk ditakrifkan dengan baik.

Dalam kes di mana jenis ahli bukan penunjuk diperlukan, pendekatan alternatif boleh digunakan:

  • Pengisytiharan Hadapan: Pendekatan ini melibatkan pengisytiharan kelas tanpa mentakrifkannya, seperti dalam:
class A;

Ini memberitahu pengkompil bahawa A ialah jenis kelas, membenarkan ia dirujuk sebagai ahli bukan penuding:

class B {
    private:
        A member;
};
  • Penunjuk Pintar: Ini menyediakan cara yang lebih selamat untuk mengurus objek dengan pengurusan memori yang kompleks, seperti pemilikan dikongsi:
class A {
    private:
        boost::shared_ptr<A> member;
};

Walaupun penunjuk mungkin mudah untuk dirujuk jenis kelas yang merujuk sendiri, memahami sebab asas ralat "jenis tidak lengkap" adalah penting untuk mereka bentuk struktur berorientasikan objek yang mantap dan cekap.

Atas ialah kandungan terperinci Mengapa Mentakrifkan Ahli Kelas Jenis Yang Sama Menghasilkan Ralat \'Jenis Tidak Lengkap\'?. 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