Semasa mengkonfigurasi projek C, pemaut kadangkala melemparkan ralat yang membingungkan seperti "Rujukan tidak ditentukan kepada vtable untuk XXX" atau "Rujukan tidak ditentukan kepada ClassName::ClassName()." Ralat ini terutamanya menandakan isu yang berpunca daripada fungsi maya dan warisan.
Masalah sering timbul apabila kelas kanak-kanak mengisytiharkan fungsi maya yang diganti tanpa memberikan definisi. Pertimbangkan coretan kod berikut:
class Base { public: virtual void f() = 0; }; class Derived : public Base { public: void f(); };
Dalam contoh ini, kelas anak Terbitan mengisytiharkan fungsi ganti f() tetapi tidak mentakrifkannya. Peninggalan ini mencetuskan ralat pemaut kerana sementara pengkompil memahami pengisytiharan, pemaut gagal untuk mengesan definisi.
Semak Perpustakaan Seni Bina: Untuk mengesahkan bahawa perpustakaan statik yang anda pautkan adalah 64-bit, rujuk kepada dokumentasi perpustakaan atau gunakan arahan fail untuk memeriksa fail perpustakaan:
file /path/to/library.a
Sahkan Kehadiran Kelas: Untuk memastikan perpustakaan mengandungi kelas yang diharapkan dan kaedah, gunakan arahan nm:
nm /path/to/library.a | grep SomeClass
Untuk menyelesaikan ralat pemaut dan melengkapkan proses pemautan dengan jayanya, berikan takrifan untuk sebarang fungsi maya yang diisytiharkan dalam kelas kanak-kanak dan pastikan perpustakaan yang berkaitan dimasukkan dengan betul dalam langkah pemautan.
Atas ialah kandungan terperinci Mengapa Pemaut C Saya Melemparkan Ralat 'Rujukan Tidak Ditakrifkan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!