Question

J'ai ce problème très étrange lors de la compilation du projet. MOC semble être l'ajout d'un espace de noms au nom de la classe étant moc'ed, bien qu'il soit mentionné nulle part dans le fichier / classe.

L'espace de noms, cependant, existe dans une bibliothèque que je l'utilise, mais il est caché loin dans les fichiers d'en-tête et je ne l'utilisez pas dans les fichiers de l'interface utilisateur. C'est ce que MOC génère:

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

L'espace de noms SmpTl est mentionné nulle part dans la déclaration de CaptureController, mais il apparaît dans le fichier .cpp MOC généré.

J'utilise Visual Studio avec l'intégration de l'intervalle QT.

Était-ce utile?

La solution

SmpTl est l'espace de noms CaptureController est défini dans, comme il a été constaté par MOC.

La macro Q_OBJECT se développe dans la déclaration de la staticMetaObject variable dans votre définition de classe (entre autres choses, il prend son envol en). Le MOC-fichier contient la définition de cette variable.

Si cela est correct, s'il vous plaît poster votre version Qt et une version dépouillée de votre fichier d'en-tête.

Autres conseils

J'ai aussi couru dans ce problème. J'avais code qui ressemblait à ceci:

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

Cette confusion MOC dans l'espace de noms pensée foo n'a jamais fermé. Apparemment, il ne savait pas _WIN32 a été défini et se est déclenché par le fait que j'ai oublié de mettre des guillemets autour du message d'erreur. Changement à:

#error "Not Supported"

fixe mon problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top