Rumah > pembangunan bahagian belakang > C++ > Mengapa Adakah 'Foo foo2();' Menyebabkan Ralat 'Permintaan Ahli dalam Jenis Bukan Kelas'?

Mengapa Adakah 'Foo foo2();' Menyebabkan Ralat 'Permintaan Ahli dalam Jenis Bukan Kelas'?

Barbara Streisand
Lepaskan: 2024-12-01 01:22:11
asal
472 orang telah melayarinya

Why Does

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

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

Dengan menghilangkan kurungan, pengkompil mentafsirkan

Foo foo2
Salin selepas log masuk

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!

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