Я попытался воспроизвести его с описанием, которое вы даете, и не смог.
Итак, вот вещи, которые стоит проверить:
ошибки во включенных охранниках?
Убедитесь, что вы случайно не получили 2 включающих охранников с одинаковыми именами в 2 разных заголовках (т. е. строки #ifndef X_H
и #define X_H
)
(это, вероятно, менее вероятно из вашего описания: было бы более вероятно, если бы ошибка была при компиляции moc_Y.cpp)
форвардные объявления для типов, используемых в сигналах или слотах?
Иногда для параметра в сигнале или слоте может потребоваться включение дополнительного заголовка.
Лучший способ объяснить это - сказать, что бывают случаи, когда ваш заголовок будетхорошо с предварительным объявлением классу, но moc
может генерировать код, который должен фактически создать или уничтожить тип, который ваш заголовок только объявит вперед.
Если это так, то естьспособ добавить код в .ui, that запрашивает включение дополнительного заголовка для заранее объявленного типа.Но самое простое решение - просто заменить предварительное объявление соответствующим заголовком, внутри Xh или Yh
проверьте содержимое файла moc_X.cpp
Есливыше не помогает, и если вы еще этого не сделали, я бы предложил открыть нарушающий moc файл и прочитать код.Как только вы увидите, что он делает, он может дать вам некоторые идеи.