سؤال

أقوم بتطوير تطبيق Qt 4 بسيط وأقوم بإجراء الحوار الخاص بي.أنا فئة فرعية QDialog, ، أدخلت Q_OBJECT الماكرو في كتلة إعلان الفصل، و...انا حصلت

خطأ رابط] مرجع غير محدد إلى "vtable لـ mydialog" ولا يوجد moc_mydialog.cpp تم إنشاؤه بواسطة برنامج التحويل البرمجي MOC.

أنا أستخدم Qt 4.1.3 على نظامي التشغيل Windows XP وmingw.لقد تابعت عملية الإنشاء من غلاف البناء الذي توفره Qt.لقد استخدمت qmake لإنشاء ملفات make وقمت بتجميع كل شيء باستخدام أمر make.

لدي فئات أخرى تلك الفئة الفرعية QPushButton و QObject على التوالي، لكنهم يجمعون موافق.ولا أجد أي فرق بينهم وبين المكسور.

لا بد أن هناك شيئًا مفقودًا في الفصل المكسور، لكني غير قادر على اكتشافه.

هل كانت مفيدة؟

المحلول

يرجع السبب في المرجع غير المحدد إلى "vtable for MyDialog" إلى عدم وجود ملف moc.تقوم معظم برامج التحويل البرمجي لـ c++ بإنشاء تعريف vtable في ملف الكائن الذي يحتوي على الوظيفة الافتراضية الأولى.عند تصنيف كائن qt ضمن فئة فرعية واستخدام الماكرو Q_OBJECT، سيكون هذا في ملف moc*.cpp.لذلك، يعني هذا الخطأ أن ملف moc مفقود.

المشاكل المحتملة التي يمكنني التفكير فيها هي:

  1. لا تتم إضافة ملف الرأس الخاص بالفئة MyDialog.h إلى HEADERS في ملف qmake.

  2. لقد قمت بتشغيل qmake لإنشاء ملف الصنع قبل إضافة الماكرو Q_OBJECT.أدى هذا إلى إنشاء ملف عمل بدون قواعد moc.يمكن إصلاح ذلك بسهولة بمجرد تشغيل qmake مرة أخرى.

  3. يشتق مربع الحوار الخاص بك من أكثر من فئة واحدة وQDialog ليس هو الفئة الأولى التي يشتق منها.لكي يعمل qmake بشكل صحيح، يجب أن تكون الفئة الأساسية المشتقة من QObject هي الفئة الأولى الموروثة منها.

  4. إذا كنت تستخدم Qt Creator، فقد تحصل على هذا الخطأ إذا فشل النشر السابق لسبب ما (مثل التطبيق قيد التشغيل بالفعل).في هذه الحالة، ما عليك سوى تنفيذ "مشروع نظيف" ثم "إعادة بناء المشروع" ثم "تشغيل" للنشر.

نصائح أخرى

إذا كان لديك ملف الرأس الخاص بك، فاتبع الخطوات:

  1. انقر بزر الماوس الأيمن على المشروع حيث قمت بإضافة هذا.
  2. اضغط على "تشغيل كميك".

سيؤدي هذا إلى مسح المراجع القديمة والإنشاء باستخدام الماكرو Q_OBJECT.QT لا تفعل ذلك عند إعادة البناء.

ولدي ترى أن المشكلة تظهر فقط عند إضافة فئة مع أي تمديد وثم يضاف امتدادا يدويا.

لحل المشكلة أضع Q_OBJECT في .H من الطبقة ومن ثم انقر فوق الحق على "مصادر" -> "إضافة ملفات القائمة ..." اختيار .ccp صفي تعديلها.

هل تستخدم كماكي؟ ربما أنك لم إضافته إلى ملف .cpp إلى مصادر وملف .h إلى متغير HEADERS الخاصة بك في ملف كماكي؟

وأقترح بكل تواضع كنت تستخدم CMake للحصول على بناء برامج كيو تي على ويندوز. وسوف تبقى لكم تذكر لإضافة الملفات المناسبة إلى ملفات البناء فيها.

وقيمة إضافية هو أنه يمكنك توليد جعل / NMAKE بناء الملفات منه، وملفات الحل برنامج Visual Studio. وإذا كنت تجميع كيو تي من مصدر لبرنامج Visual Studio سوف تكون قادرة على كل رمز وبناء مع MS IDE / المترجم.

وهذا بالطبع إذا كنت تستخدم Visual Studio على الإطلاق.

والرسالة غير معروف إشارة إلى `vtable لMyDialog" يمكن أن يكون أيضا نتيجة لتنفيذ المفقودين (في MyDialog) من دالة ظاهري خالصة في فئة مشتقة MyDialog من.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top