MOC ajoutant un espace de noms aux noms de classe

J’ai ce problème très étrange lors de la compilation du projet. MOC semble append un espace de nom au nom de la classe en cours de mocage, bien qu’il ne soit mentionné nulle part dans le fichier / la classe.

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

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

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

J’utilise Visual Studio avec l’intégration QT.

SmpTl est l’espace de noms dans CaptureController est défini, tel qu’il a été trouvé par MOC.

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

Si cela n’est pas correct, publiez votre version de Qt et une version simplifiée de votre fichier d’en-tête.

J’ai aussi rencontré ce problème. J’ai eu le code qui a ressemblé à ceci:

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

Ce MOC confus en pensant à l’espace de noms foo ne s’est jamais fermé. Apparemment, il ne savait pas que _WIN32 était défini et avait été _WIN32 par le fait que j’avais oublié de mettre des guillemets autour du message d’erreur. Le changer pour:

 #error "Not Supported" 

résolu mon problème.