Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kelas Bersarang dalam C Diisytiharkan Ke Hadapan untuk Penggunaan Di Luar Kelas Terlampirnya?

Bolehkah Kelas Bersarang dalam C Diisytiharkan Ke Hadapan untuk Penggunaan Di Luar Kelas Terlampirnya?

Barbara Streisand
Barbara Streisandasal
2024-12-01 15:57:10634semak imbas

Can Nested Classes in C   Be Forward Declared for Use Outside Their Enclosing Class?

Pengisytiharan Ke Hadapan Kelas Bersarang: Tugas Yang Mustahil

Dalam C , kelas dalaman boleh menjadi cara yang mudah untuk mengatur kod. Walau bagaimanapun, apabila cuba menghantar objek kelas dalam dengan rujukan di luar definisi kelas yang disertakan, ralat penyusunan boleh timbul. Ini kerana pengkompil memerlukan kelas dalaman ditakrifkan atau diisytiharkan sepenuhnya sebelum digunakan dalam fungsi panggilan.

Pertimbangkan kod berikut:

class Container {
public:
    class Iterator {
        ...
    };

    ...
};

Jika anda ingin lulus Iterator objek dengan rujukan dalam fungsi di luar skop kelas Container, anda secara intuitif boleh cuba untuk memajukan mengisytiharkan Iterator kelas:

class Container::Iterator;

class Foo {
    void Read(Container::Iterator& it);
};

Walau bagaimanapun, pendekatan ini gagal dengan ralat penyusunan disebabkan oleh Iterator jenis yang tidak diketahui.

Had Pengisytiharan Hadapan

Dalam C , pengisytiharan hadapan hanya boleh digunakan untuk mengisytiharkan kelas itu sendiri, bukan ahli bersarangnya. Sekatan ini menghalang pengisytiharan hadapan kelas dalaman.

Penyelesaian

Untuk menyelesaikan isu ini, pertimbangkan strategi alternatif:

  • Jadikan kelas tidak bersarang: Alihkan kelas Iterator di luar kelas Container supaya ia boleh ke hadapan diisytiharkan secara bebas.
  • Susun semula pengisytiharan kelas: Tentukan kelas Iterator sepenuhnya sebelum menggunakannya dalam tandatangan fungsi kelas Foo.
  • Gunakan kelas asas biasa: Buat kelas asas yang berasingan yang boleh diwarisi oleh kedua-dua kelas Iterator dan fungsi dalam kelas Foo. Ini membolehkan anda memajukan mengisytiharkan kelas asas biasa dan menghantar objek yang diperoleh daripadanya melalui rujukan.

Atas ialah kandungan terperinci Bolehkah Kelas Bersarang dalam C Diisytiharkan Ke Hadapan untuk Penggunaan Di Luar Kelas Terlampirnya?. 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