C++ ialah bahasa pengaturcaraan yang popular, tetapi semasa penggunaan, ralat kompilasi "rujukan tidak ditentukan" sering berlaku, yang membawa banyak masalah kepada pembangunan program. Artikel ini akan membincangkan penyelesaian kepada ralat "rujukan tidak ditentukan" daripada punca dan penyelesaiannya.
1. Punca ralat
Apabila pengkompil C++ menyusun fail sumber, ia akan dibahagikan kepada dua peringkat: peringkat penyusunan dan peringkat pautan. Fasa kompilasi menukarkan kod sumber dalam fail sumber kepada kod pemasangan, manakala fasa pemautan menggabungkan fail sumber yang berbeza menjadi fail boleh laku.
Dua konsep perlu dibezakan di sini: pengisytiharan dan definisi. Pengisytiharan merujuk kepada mengisytiharkan kewujudan pembolehubah atau fungsi dalam atur cara, memberitahu pengkompil nama, jenis, senarai parameter dan maklumat lain. Definisi adalah untuk memperuntukkan ruang storan untuk pembolehubah atau fungsi dan memberikan kod pelaksanaan. Dalam projek, jika pengisytiharan dan definisi tidak disatukan, ralat kompilasi "rujukan tidak ditentukan" mungkin berlaku.
Secara khusus, sebab utama ralat ini ialah:
Untuk fail pengepala, untuk memastikan keteguhan dan kebolehbacaan program, perlindungan fail pengepala ( #ifndef dan kompilasi bersyarat arahan yang ditakrifkan oleh #define). Walau bagaimanapun, apabila fail pengepala disertakan beberapa kali, pengkompil akan membuang ralat "takrifan berbilang". Untuk menyelesaikan masalah ini, mekanisme perlindungan fail pengepala telah diperkenalkan Walau bagaimanapun, penggunaan mekanisme perlindungan fail pengepala yang tidak betul juga boleh menyebabkan ralat penyusunan "rujukan tidak ditentukan".
Apabila pengkompil tidak dapat mencari beberapa fungsi yang tidak ditentukan semasa fasa pautan, ralat "rujukan tidak ditentukan" akan muncul. Biasanya, ini adalah kerana fail perpustakaan yang sepadan atau fail pustaka pautan tiada.
Jika fungsi atau pembolehubah tidak ditakrifkan dalam atur cara, ralat "rujukan tidak ditentukan" akan muncul.
2. Penyelesaian
Untuk mengelakkan fail pengepala dimasukkan beberapa kali, anda boleh menggunakan mekanisme perlindungan fail pengepala. Cuma tambahkan kod berikut pada fail pengepala:
#ifndef _HEADER_FILE_NAME_H_ #define _HEADER_FILE_NAME_H_ //..头文件内容 #endif
Antaranya, _HEADER_FILE_NAME_H_ boleh digantikan dengan pengecam lain untuk membezakan fail pengepala yang berbeza. Ini boleh mengelakkan pengisytiharan berulang dan definisi fail pengepala, dengan itu menghapuskan ralat penyusunan "rujukan tidak ditentukan".
Jika fungsi perpustakaan tertentu atau fail perpustakaan pautan digunakan semasa menyusun atur cara, maka fail perpustakaan ini perlu dipautkan ke dalam fail boleh laku semasa peringkat pautan. Untuk platform Windows, anda boleh menggunakan arahan berikut pada baris arahan untuk memaut:
g++ main.cpp -o main.exe -l library_name
Antaranya, -l diikuti dengan nama fail perpustakaan yang perlu dipautkan. Untuk platform Linux, anda perlu menggunakan arahan berikut pada baris arahan untuk memaut:
g++ main.cpp -o main -l library_name
Begitu juga, -l diikuti dengan nama fail perpustakaan yang perlu dipautkan. Jika ralat "rujukan tidak ditentukan" berlaku, anda boleh menyemak sama ada fail pustaka yang diperlukan dipautkan dan sama ada laluan itu betul.
Jika ralat "rujukan tidak ditentukan" berlaku, ia biasanya kerana pengisytiharan dan takrifan yang sepadan tidak boleh ditemui dalam atur cara. Untuk menyelesaikan masalah ini, anda boleh menyemak bahawa semua pengisytiharan dan takrifan disertakan dalam program untuk memastikan program disusun dengan jayanya.
Ringkasnya, apabila ralat "rujukan tidak ditentukan" berlaku, ia biasanya kerana fail pengepala disertakan beberapa kali, fail perpustakaan pautan tidak dipautkan atau fungsi atau pembolehubah dalam program tidak ditakrifkan dengan betul. Oleh itu, untuk mengelakkan ralat ini daripada berlaku, kita perlu menyemak dengan teliti pengisytiharan dan definisi program dan menunjukkan di mana masalah itu berlaku. Dalam pengaturcaraan sebenar, anda mesti sentiasa memberi perhatian kepada ralat ini, mencari dan menyelesaikan masalah dalam masa, dan memastikan ketepatan dan operasi normal program.
Atas ialah kandungan terperinci Ralat kompilasi C++: rujukan tidak ditentukan, bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!