Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah saya mendapat ralat \"Rujukan Tidak Ditakrifkan\" apabila menghantar rujukan pemalar statik kepada fungsi?

Mengapakah saya mendapat ralat \"Rujukan Tidak Ditakrifkan\" apabila menghantar rujukan pemalar statik kepada fungsi?

Barbara Streisand
Barbara Streisandasal
2024-10-30 18:46:03582semak imbas

Why do I get

Rujukan Tidak Ditakrifkan dengan Rujukan Malar Statik

Apabila melaksanakan fungsi dengan rujukan kepada pemalar statik, seperti const int & a, pengkompil mungkin menghadapi ralat "Rujukan tidak ditentukan". Ralat ini berpunca daripada fakta bahawa, walaupun pemalar diisytiharkan sebagai statik, ia tidak ditakrifkan dalam konteks di mana fungsi dipanggil.

Menurut standard C (9.4.2/4), statik ahli data jenis kamiran const boleh dimulakan dengan pemula pemalar dalam pengisytiharannya. Walau bagaimanapun, apabila digunakan dalam parameter fungsi, menghantarnya dengan rujukan tetap merupakan "menggunakan"nya (seperti 3.2/2) dan mencetuskan keperluan untuk definisinya dalam skop ruang nama.

Dalam contoh yang disediakan, kConst pemalar statik digunakan dalam fungsi foo melalui baris foo(kConst). Oleh kerana pemalar tidak ditakrifkan di mana-mana, pengkompil cuba membuat rujukan kepada objek yang tidak ditentukan. Untuk menyelesaikan masalah ini, pembangun mesti sama ada memberikan takrifan untuk kConst atau lulus pemalar mengikut nilai (memaksa penciptaan objek sementara), seperti yang ditunjukkan dalam penyelesaian yang dicadangkan contoh.

Walaupun GCC mungkin membenarkan menghantar pemalar mengikut nilai (melalui static_cast(kConst)), ia mematuhi piawaian apabila menghantarnya melalui rujukan. Ralat ini berfungsi sebagai peringatan untuk menentukan pemalar statik atau menggunakannya mengikut nilai apabila menghantar kepada fungsi yang mengambil rujukan tetap.

Atas ialah kandungan terperinci Mengapakah saya mendapat ralat \"Rujukan Tidak Ditakrifkan\" apabila menghantar rujukan pemalar statik kepada fungsi?. 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