Mengapa Mengisytiharkan Ahli Kelas Jenis Yang Sama Menyebabkan Ralat \'Jenis Tidak Lengkap\' dalam C ?

Patricia Arquette
Lepaskan: 2024-11-19 06:20:02
asal
121 orang telah melayarinya

Why Does Declaring a Class Member of the Same Type Cause an

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;
};
Salin selepas log masuk

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;
};
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan