Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat Penyambung 'Rujukan Tidak Ditakrifkan kepada Jadual Maya dan Pembina' dalam GCC C ?

Mengapa Saya Mendapat Ralat Penyambung 'Rujukan Tidak Ditakrifkan kepada Jadual Maya dan Pembina' dalam GCC C ?

Linda Hamilton
Linda Hamiltonasal
2024-12-18 08:49:10437semak imbas

Why Am I Getting

GCC C Linker Error: Undefined Rujukan kepada Virtual Tables and Constructors

Dalam C , fungsi maya membenarkan kelas terbitan mengatasi kaedah yang ditakrifkan dalam mereka kelas asas. Apabila memautkan atur cara yang menggunakan fungsi maya, pemaut memerlukan takrif kaedah ini untuk hadir dalam fail objek. Kegagalan untuk memberikan takrifan ini mengakibatkan ralat rujukan tidak ditentukan, seperti:

  • Rujukan tidak ditentukan kepada 'vtable for XXX'
  • Rujukan tidak ditentukan kepada 'ClassName::ClassName()'

Mungkin Punca

Ralat ini boleh berlaku atas pelbagai sebab, termasuk:

  1. Timpa Fungsi Maya tanpa Definisi: Seperti yang dinyatakan sebelum ini, setiap fungsi maya mesti mempunyai definisi dalam kelas akhir yang menggunakannya. Jika anda mengisytiharkan fungsi maya dalam kelas kanak-kanak tetapi tidak mentakrifkannya, pemaut akan melaporkan ralat rujukan yang tidak ditentukan.
  2. Fail Pengepala Tiada: Fail pengepala yang mengandungi kelas takrifan mungkin tidak disertakan dengan betul dalam fail sumber yang menggunakannya.
  3. Pautan Perpustakaan Salah: Pastikan anda memaut ke perpustakaan yang betul yang mengandungi pelaksanaan kelas yang anda gunakan.

Mengesahkan Perpustakaan Statik dan Ketersediaan Kelas

  1. Bitness Perpustakaan: Untuk menyemak sama ada perpustakaan statik adalah 64-bit, gunakan arahan fail:

    file -L <library_path>

    Ia sepatutnya menunjukkan objek kongsi 64-bit x86-64 jika pustaka adalah 64-bit.

  2. Ketersediaan Kelas: Gunakan perintah objdump -t untuk menyemak sama ada perpustakaan mengandungi yang khusus kelas:

    objdump -t <library_path> | grep <class_name>

    Jika kelas ada, ia akan disenaraikan dalam output.

Contoh Isu

Seperti yang ditunjukkan dalam log ralat yang disediakan, rujukan yang tidak ditentukan kepada SomeClass::close() menunjukkan bahawa kelas telah digunakan tetapi tidak ditakrifkan. Begitu juga, rujukan yang tidak ditentukan kepada SomeClass::SomeClass() dan vtable untuk SomeOtherClass mencadangkan bahawa pembina dan jadual maya untuk kelas SomeOtherClass tidak ditakrifkan dalam fail objek.

Penyelesaian

Untuk menyelesaikan isu ini, pastikan semua fungsi maya ditakrifkan dalam kanak-kanak yang sesuai kelas, fail pengepala yang diperlukan disertakan dan perpustakaan yang betul dipautkan ke program anda.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Penyambung 'Rujukan Tidak Ditakrifkan kepada Jadual Maya dan Pembina' dalam GCC C ?. 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
Artikel sebelumnya:Mengapa Kelas Matriks Saya `Artikel seterusnya:Mengapa Kelas Matriks Saya `