سؤال

لدي هذه المشكلة الغريبة للغاية أثناء تجميع المشروع. يبدو أن MOC يضيف مساحة اسم إلى اسم الفصل يجري moc'ed ، على الرغم من أنه لم يتم ذكره في أي مكان في الملف/الفصل.

ومع ذلك ، فإن مساحة الاسم موجودة في مكتبة أستخدمها ، لكنها مخفية بعيدًا في ملفات الرأس ولا أستخدمها في ملفات واجهة المستخدم. هذا ما يولده MOC:

const QMetaObject SmpTl::CaptureController::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController,
  qt_meta_data_SmpTl__CaptureController, 0 }};

ال SmpTl لم يتم ذكر مساحة الاسم في أي مكان في إعلان CaptureController, ، ولكن يظهر في ملف .cpp الذي تم إنشاؤه MOC.

أنا أستخدم Visual Studio مع تكامل QT.

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

المحلول

SmpTl هي مساحة الاسم CaptureController تم تعريفه في ، كما وجد من قبل MOC.

ال Q_OBJECT يتوسع الماكرو إلى إعلان staticMetaObject-متغير داخل تعريف الفصل الخاص بك (من بين أشياء أخرى تتوسع فيها). يحتوي ملف MOC على تعريف هذا المتغير.

إذا لم يكن هذا صحيحًا ، فيرجى نشر إصدار QT الخاص بك وإصدار تجريد من ملف رأسك.

نصائح أخرى

واجهت أيضا هذه المشكلة. كان لدي رمز يبدو هكذا:

namespace foo {
    #ifdef _WIN32
    ...   // This code was fine
    #else
    #error Not Supported
    #endif
}

هذا MOC الخلط في مساحة اسم التفكير foo لم تغلق. على ما يبدو ، لم يكن يعلم _WIN32 تم تعريفه ، وتعثرت من خلال حقيقة أنني نسيت وضع اقتباسات حول رسالة الخطأ. تغييره إلى:

#error "Not Supported"

إصلاح مشكلتي.

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