Undefined reference to “Classname::Classname” Qt C++

160
12 июля 2019, 05:50

У меня есть проект, который содержит в себе два других (использую subdirs). Вызовом нужных функций из подпроектов занимается класс MainWindow, который находится, как бы, над ними (т.е. это не файл из подпроектов).
Проблема возникает, когда я пытаюсь обратиться с "управляющего" файла к классам подпроектов.
Ошибки:

  • :-1: error: mainwindow.o: in function `MainWindow::slot_showTable()':
  • undefined reference to `Crutch::Crutch()'
  • :-1: error: collect2: error: ld returned 1 exit status


Управляющий файл
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
// Здесь подключаются только GUI библиотеки, вроде QPushButton и др.
//namespace Ui {
//class MainWindow;
//}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void slot_showTable(); // В этом слоте происходит обращение к подпроекту
private:
// Тут GUI переменные, вроде QPushButton, QLabel и т.д.  
//    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
//#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
//    ui(new Ui::MainWindow)
{
//    ui->setupUi(this);
    createConnections();
}
void MainWindow::createConnections()
{
// Нужный нам слот
    connect(btnShowBoardTable, &QPushButton::clicked,
            this, &MainWindow::slot_showTable);
    ...
}
#include "subproject/crutch.h"
void MainWindow::slot_showTable()
{
    Crutch *s = new Crutch(); // Здесь и появляется ошибка. Если попытаться обратиться к любому методу класса, то ошибка появляется и на этот метод тоже
}

Файл, находящийся в подпроекте
crutch.h

// Этот файл находится в подпроекте
#ifndef CRUTCH_H
#define CRUTCH_H
#include "mainwindow.h" // Этот файл находится в том же подпроекте, что и crutch.h, именно в нём располагается класс TableMainWindow
#include <QObject>
class TableMainWindow;
class Crutch : public QObject
{
    Q_OBJECT
public:
    Crutch();
    ~Crutch();
    void showMainWindow();
private:
    TableMainWindow* mainWindow;
};
#endif // CRUTCH_H

crutch.cpp

#include "crutch.h"
Crutch::Crutch()
{
    mainWindow = new TableMainWindow;;
}
void Crutch::showMainWindow()
{
    mainWindow->show();
}
Crutch::~Crutch()
{
    delete mainWindow;
}

Как мне кажется, проблема заключается в строчке #include "subproject/crutch.h" но как исправить это не имею ни малейшего предположения.
P.S. в приведённом коде дважды встречается файл mainwindow, но это два разных файла. Просто один находится в подпроекте (он встречается в crutch.h), а второй в "шапке" проекта

MergeAllProjects.pro

TEMPLATE = subdirs
SUBDIRS = tablewindow
SUBDIRS += build
build.file = build.pro
SUBDIRS += cfg_browser_sh

build.pro

TEMPLATE = app
QT += widgets
SOURCES += main.cpp\
    mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

Pro-файл первого (с ним происходит взаимодействие) подпроекта
tablewindow.pro

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TableWindow
CONFIG += c++11
#TEMPLATE = app
TEMPLATE = lib
# каталог, в котором будет располагаться результирующий исполняемый файл
DESTDIR = $$OUT_PWD/bin
MOC_DIR = moc
OBJECTS_DIR = obj
RCC_DIR = rcc
UI_DIR = uic
DEFINES += QT_DEPRECATED_WARNINGS
include(cross/cross.pri)
include(table_window/table_window.pri)
INCLUDEPATH += $$PWD
SOURCES += \
    crutch.cpp \
    mainwindow.cpp
HEADERS += \
    crutch.h \
    mainwindow.h
FORMS += \
        mainwindow.ui
RESOURCES += \
    $$PWD/tablewindow.qrc

Так же имеется .pri файл, но он лишь содержит набор файлов, находящихся в этой же подпапке (headers, sources, forms)
Т.к. со вторым подпроектом взаимодействия нет (на данный момент), его .pro файлы решил не выкладывать (если необходимо, то и их предоставлю)


Здесь находятся все pro файлы проекта

READ ALSO
Не возможно выйти из цикла c++

Не возможно выйти из цикла c++

Вот такой кусок кода:

140
Не отображается часть кода из *.jsp в Tomcat

Не отображается часть кода из *.jsp в Tomcat

Использую IntelliJ IDEA Ultimate и Tomcat 9:

144
OneToMany связь Spring

OneToMany связь Spring

Имеется связь OneToMany, У одного Region есть много DistrictsИмеется простой REST контроллер, который возвращает все Region, но ответ приходит

136
бесконечный переворот матрицы на 90,-90,0 Java

бесконечный переворот матрицы на 90,-90,0 Java

Напишите программу, которая загружает матрицу и выполняет указанные преобразования указанного массива на 90, -90, 90 градусовПреобразования...

149