MOC adición de espacio de nombres a los nombres de clases
-
30-09-2019 - |
Pregunta
Tengo este problema muy extraño al compilar el proyecto. MOC parece ser la adición de un espacio de nombres para el nombre de la clase siendo moc'ed, aunque no se menciona en ninguna parte en el archivo / clase.
El espacio de nombres, sin embargo, existe en una biblioteca que yo uso, pero está escondido lejos, en los archivos de cabecera y yo no lo uso en los archivos de la interfaz de usuario. Esto es lo que genera MOC:
const QMetaObject SmpTl::CaptureController::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController,
qt_meta_data_SmpTl__CaptureController, 0 }};
El espacio de nombres SmpTl
no se menciona en ninguna parte en la declaración de CaptureController
, pero aparece en el archivo .cpp generados MOC.
Estoy usando Visual Studio con la integración de QT.
Solución
SmpTl
es la CaptureController
espacio de nombres se define en, ya que se encontró por MOC.
La macro Q_OBJECT
se expande en la declaración de la staticMetaObject
variable dentro de su definición de clase (entre otras cosas que se expande a). El MOC-archivo contiene la definición de esa variable.
Si esto no es correcto, por favor, puesto que su versión de Qt y una versión simplificada de la cabecera del archivo.
Otros consejos
También se encontró con este problema. Tenía código que se veía así:
namespace foo {
#ifdef _WIN32
... // This code was fine
#else
#error Not Supported
#endif
}
Este MOC confundido en el pensamiento foo
espacio de nombres nunca se cerró. Al parecer, no sabía _WIN32
se definió, y tuvo un tropiezo por el hecho de que se me olvidó poner comillas en el mensaje de error. Si lo cambia a:
#error "Not Supported"
fijo mi problema.