Rumah > pembangunan bahagian belakang > C++ > Mengapa Pemaut C Saya Melemparkan Ralat 'Rujukan Tidak Ditakrifkan'?

Mengapa Pemaut C Saya Melemparkan Ralat 'Rujukan Tidak Ditakrifkan'?

Linda Hamilton
Lepaskan: 2024-12-22 03:40:11
asal
345 orang telah melayarinya

Why Are My C   Linker Throwing

Ralat Rujukan Tidak Ditakrifkan: Memahami Punca

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.

Mengatasi Fungsi Maya

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

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.

Cara Mengesahkan Keserasian Perpustakaan Statik

  1. 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
    Salin selepas log masuk
  2. Sahkan Kehadiran Kelas: Untuk memastikan perpustakaan mengandungi kelas yang diharapkan dan kaedah, gunakan arahan nm:

    nm /path/to/library.a | grep SomeClass
    Salin selepas log masuk

Menyelesaikan Isu

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!

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