Q_OBJECT Ralat Pautan: 'rujukan tidak ditentukan kepada vtable'
Pertimbangkan coretan kod Qt berikut:
<code class="cpp">class T : public QObject, public QGraphicsItem
{
Q_OBJECT
public:
T() {}
QRectF boundingRect() const {return QRectF();}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget) {}
};
int main()
{
T t;
return 0;
}</code>
Salin selepas log masuk
Apabila menyusun kod ini, anda mungkin menghadapi ralat pemaut seperti:
undefined reference to `vtable for T'
undefined reference to `vtable for T'
...
Salin selepas log masuk
Penyelesaian:
Ralat ini biasanya berlaku apabila unit yang dijana MOC untuk kelas anda tidak disertakan dalam proses pemautan. Unit MOC mengandungi maklumat meta tentang kelas, termasuk makro Q_OBJECTnya.
Punca dan Pembetulan Kemungkinan:
-
Fail Pengepala Berasingan: Pastikan pengisytiharan kelas anda berada dalam fail pengepala yang berasingan. Sistem binaan mungkin tidak mengimbas fail pelaksanaan untuk mencari pengisytiharan kelas.
-
Generasi MOC: Sahkan bahawa unit MOC telah dijana. Jalankan qmake sekali lagi untuk memaksa qmake mencipta peraturan MOC yang diperlukan. Jika menggunakan Qt Creator, pilih "Jalankan qmake" daripada menu konteks projek.
-
Q_OBJECT Macro: Sahkan bahawa anda telah menggunakan makro Q_OBJECT dengan betul dalam pengisytiharan kelas anda. Ia harus diletakkan sebelum mana-mana definisi pembina.
-
Warisan: Jika kelas ini sebelum ini tidak tergolong dalam sistem meta-objek Qt (cth., ia tidak mempunyai makro Q_OBJECT atau diwarisi daripada kelas lain ), jalankan semula qmake atau buat perubahan yang tidak ketara pada fail projek anda untuk mencetuskan larian qmake.
Atas ialah kandungan terperinci Mengapa Saya Mendapat \'Q_OBJECT Ralat Memautkan: \'rujukan tidak ditentukan kepada vtable\'\' dalam Aplikasi Qt Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!