Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa saya mendapat ralat \"\'rujukan tidak ditentukan kepada vtable\'\" apabila menggunakan Q_OBJECT?

Mengapa saya mendapat ralat \"\'rujukan tidak ditentukan kepada vtable\'\" apabila menggunakan Q_OBJECT?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 07:30:03272semak imbas

Why am I getting an

Ralat 'undefined reference to vtable' semasa Menggunakan Q_OBJECT

Ralat "'undefined reference to vtable'" berlaku apabila pemaut tidak dapat mencari jadual fungsi maya (vtable) untuk kelas yang mewarisi daripada QObject dan mengisytiharkan makro Q_OBJECT. Ralat ini boleh timbul atas beberapa sebab.

Punca Berkemungkinan:

  • Unit MOC Hilang: MOC (Penyusun Objek Meta) menjana fail unit berasingan yang mengandungi pelaksanaan fungsi berkaitan QObject. Pastikan unit yang dijana oleh MOC disertakan dalam proses pemautan.
  • Pengisytiharan Kelas dalam Fail Pelaksanaan: Letakkan pengisytiharan kelas dalam fail pengepala berasingan dan bukannya fail pelaksanaan. Sistem binaan mungkin tidak mengimbas fail pelaksanaan untuk pemprosesan MOC.
  • Invokasi qmake yang tiada: Qmake menjana peraturan binaan yang diperlukan untuk MOC. Jika kelas pada mulanya tidak tergolong dalam sistem meta-objek Qt, jalankan qmake sekali lagi untuk mengemas kini cap masanya dan mencetuskan pelaksanaannya.

Penyelesaian:

Untuk menyelesaikan isu ini, ikut langkah berikut:

  1. Alihkan pengisytiharan kelas ke fail pengepala yang berasingan.
  2. Jalankan "Jalankan qmake" daripada menu konteks projek dalam Qt Creator atau secara manual kemas kini cap masa fail projek untuk memaksa qmake invocation.
  3. Pastikan unit MOC yang dijana disertakan dalam proses pemautan.

Langkah-langkah ini harus menghapuskan ralat 'rujukan tidak ditentukan kepada vtable' dan benarkan kod anda berjaya disusun.

Atas ialah kandungan terperinci Mengapa saya mendapat ralat \"\'rujukan tidak ditentukan kepada vtable\'\" apabila menggunakan Q_OBJECT?. 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