Bagaimana untuk Menyelesaikan Ralat \'Tidak Dapat Mengikat Rujukan Nilai Bukan Konst\' dalam Pembina C?

Barbara Streisand
Lepaskan: 2024-10-30 07:58:02
asal
1065 orang telah melayarinya

How to Resolve the

Mengendalikan Ralat "Tidak Dapat Mengikat Rujukan Nilai L Bukan Kons" dalam Pembina C

Apabila cuba memulakan objek peribadi dalam pembina, menghadapi ralat "tidak boleh mengikat rujukan nilai bukan const jenis 'int&' kepada nilai rnilai jenis 'int'" boleh mengecewakan. Ralat ini berlaku apabila rujukan lvalue (alias kepada pembolehubah bernama) dijangka tetapi hujah yang diluluskan ialah rvalue (nilai sementara atau literal).

Dalam kod yang diberikan, ralat timbul kerana kelas Foo pembina mengambil parameter rujukan bukan const (int & x), yang mesti merujuk kepada nilai l. Walau bagaimanapun, fungsi genValue() mengembalikan nilai r, kerana ia mencipta pembolehubah int sementara yang dimusnahkan sebaik sahaja fungsi itu kembali.

Untuk menyelesaikan ralat ini, kita mesti mengelak daripada mengikat rujukan lvalue kepada nilai r. Berikut ialah pecahan beberapa penyelesaian yang berpotensi:

Pass by Value

Penyelesaian yang paling mudah ialah menghantar nilai yang dikembalikan oleh genValue() mengikut nilai kepada pembina Foo. Ini bermakna menukar pembina dalam kelas Foo daripada Foo(int &x) kepada Foo(int x).

Buat Pembolehubah Sementara

Sebagai alternatif, anda boleh mencipta sementara int pembolehubah di dalam pembina Bar, tetapkan hasil genValue() kepadanya, dan kemudian hantar rujukan kepada pembolehubah sementara itu kepada pembina Foo. Pendekatan ini memastikan bahawa nilai l tersedia untuk terikat pada rujukan bukan const.

Gunakan Penunjuk Pintar

Jika anda bersedia menggunakan penunjuk pintar, anda boleh cipta unique_ptr untuk mengurus jangka hayat objek Foo. Ini membolehkan anda menghantar penuding ke objek Foo kepada pembina Foo melalui rujukan, kerana ia adalah nilai l.

Dengan melaksanakan salah satu daripada penyelesaian ini, anda boleh mengendalikan ralat yang disebutkan di atas dengan berkesan dan memulakan Foo peribadi dengan betul objek dalam pembina Bar.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Tidak Dapat Mengikat Rujukan Nilai Bukan Konst\' dalam Pembina 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