Qt: переопределение / игнорирование рецепта и множественного определения для 2 классов с одинаковым именем, но с другим пространством имен - PullRequest
0 голосов
/ 29 января 2019

Мое приложение использует 2 класса, наследуемых от QObject.Они имеют одно и то же имя (Communication), но находятся в разных пространствах имен («SGBAPI» и «ParamsAPI»).Каждый из них объявляется в одном файле с одинаковыми именами ("communication.h" и "communication.cpp"), но в разных каталогах ("SGB" и "Params").Смотрите снимок экрана:

enter image description here

qMake генерирует предупреждения и происходит сбой компиляции:

enter image description here

Посмотрев make-файл, я обнаружил, что он генерирует один и тот же файл communication.o для обоих файлов communication.cpp.

Что я могу сделать, чтобы решить эту проблему?Конечно, я могу переименовать исходные файлы, но они генерируются автоматически, поэтому я предпочитаю другое решение, если оно есть.

Обновление 1:

.pro файл:

QT       += core gui serialport network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = sgbTest
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
        main.cpp \
        mainwindow.cpp \
    sgb.cpp

SOURCES += $$files(autogenerated/Params/*.cpp, true) $$files(autogenerated/SGB/*.cpp, true) $$files(lib/*.cpp, true)

HEADERS += \
        mainwindow.h \
    compilationdefines.h \
    sgb.h

HEADERS += $$files(autogenerated/Params/*.h, true) $$files(autogenerated/SGB/*.h, true) $$files(lib/*.h, true)

FORMS += \
        mainwindow.ui \
        lib/com/dlgconnection.ui


# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

Обновление 2:

Основываясь на ответе paolo, я попытался использовать

CONFIG += object_parallel_to_source

. Это работает, если класс не наследуется от QObject.Если класс наследует от QObject, Qt по-прежнему генерирует все файлы moc _ *. Cpp в корневом каталоге компиляции и по-прежнему не компилируется.

Обновление 3:

Humвыглядит как ошибка https://bugreports.qt.io/browse/QTBUG-70874

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...