Ralat Invokasi Pembina: Memahami "Permintaan Ahli dalam Jenis Bukan Kelas"
Apabila menginstant objek dengan parameter pembina tertentu, pengaturcara mungkin menghadapi ralat "permintaan untuk ahli '..' dalam '..' yang bukan jenis kelas." Memahami sumber ralat ini adalah penting untuk menyelesaikannya dengan berkesan.
Contoh kod yang disediakan menunjukkan isu tersebut. Kelas Foo mempunyai dua pembina: pembina lalai tanpa hujah dan pembina yang menerima satu parameter integer. Menghidupkan foo1 menggunakan fungsi pembina berparameter seperti yang dimaksudkan. Walau bagaimanapun, menggunakan pembina lalai mengakibatkan ralat kompilasi.
Mengapa ini berlaku? Sintaks
Foo foo2();
salah tafsir dirinya sebagai pengisytiharan fungsi. Pengkompil menganggapnya sebagai mengisytiharkan fungsi bernama foo2 dengan jenis kembali Foo, mengharapkan hujah berdasarkan kurungan. Walau bagaimanapun, niatnya adalah untuk membuat instantiat objek bernama foo2 menggunakan pembina lalai, yang tidak mengambil sebarang hujah.
Oleh itu, pengkompil menetapkan foo2 sebagai jenis bukan kelas bernama Foo(). Penamaan ini menghalang akses kepada kaedah yang ditakrifkan dalam kelas Foo, sekali gus menjadikan seruan foo2.bar() tidak sah.
Untuk membetulkan ralat ini, sintaks hendaklah dilaraskan kepada:
Foo foo2;
Dengan menghilangkan kurungan, pengkompil mentafsirkan
Foo foo2
sebagai pengisytiharan objek foo2 menggunakan pembina lalai. Ini akan berjaya membuat seketika objek jenis Foo, membenarkan akses kepada fungsi ahlinya, termasuk bar().
Atas ialah kandungan terperinci Mengapa Adakah 'Foo foo2();' Menyebabkan Ralat 'Permintaan Ahli dalam Jenis Bukan Kelas'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!