Ошибка “Undefined reference to” подключённой (!) функции

170
17 апреля 2018, 04:26

В общем, создал заголовочный и .cpp файлы. Подключил к проекту. В заголовочном указал прототип функции, в .cpp сама его реализация. Включил заголовочный файл в mainwindow.cpp, потом начал применять реализацию функции. И соответственно Qt выдаёт ошибку о том, что функция не распознана, хотя она появляется в подсказках. В чём может быть проблема? Ниже приведу код четырёх файлов: .pro, заголовочного и исполнительно файлов реализуемой функции и самого mainwindow.cpp. Проблема касается всех функций в модуле, их всего две. Эти функции в jd.h/jd.cpp. Так же приложу скрин с ошибкой.

.pro:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = GPC
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
        main.cpp \
        mainwindow.cpp \
    extra_math.cpp \
    gcs.cpp \
    jd.cpp
HEADERS += \
        mainwindow.h \
    extra_math.h \
    gcs.h \
    consts.h \
    jd.h
FORMS += \
        mainwindow.ui

jd.h:

#ifndef JD_H
#define JD_H
#include "QDateTime"
double    UTCtoJD(QDateTime UTC);
QDateTime JDtoUTC(double JD);
#endif // JD_H

jd.cpp:

#include "jd.h"
#include "math.h"
#include "QDateTime"
double UTCtoJD(QDateTime UTC)
{
    QDate DATE = UTC.date();
    int DAY   = DATE.day();
    int MONTH = DATE.month();
    int YEAR  = DATE.year();
    QTime TIME = UTC.time();
    int HOUR    = TIME.hour();
    int MINUTE  = TIME.minute();
    int SECOND  = TIME.second();
    int MSECOND = TIME.msec();
    double a = floor( (14 - MONTH)/12 );
    double y = YEAR + 4800 - a;
    double m = MONTH + 12*a - 3;
    double JDN = DAY + floor( (153*m +2)/5 ) + 365*y + floor(y/4)
                         - floor(y/100) + floor(y/400) - 32045 ;
    double JD = JDN - 0.5 + (HOUR*3600 + MINUTE*60 + SECOND + float(MSECOND)*1E-3)/86400;
    return JD;
}
QDateTime JDtoUTC(double JD)
{
    double JDN = floor(JD + 0.5);
    double a = JDN + 32044;
    double b = floor( (4*a + 3)/146097 );
    double c = a - floor( 146097*b/4 );
    double d = floor( (4*c+3)/1461 );
    double e = c - floor( 1461*d/4 );
    double m = floor( (5*e+2)/153 );
    int DAY = e - floor( (153*m+2)/5 ) + 1;
    int MONTH = m + 3 - 12*floor(m/10);
    int YEAR = 100*b + d - 4800 + floor(m/10);
    QDate DATE(YEAR, MONTH, DAY);
    double msec = round(((JD+0.5) - floor(JD+0.5))*864E5);
    int HOUR = floor(msec/36E5);
    int MINUTE = floor((msec-HOUR*36E5)/6E4);
    int SECOND = floor((msec - HOUR*36E5 - MINUTE*6E4)/1E3);
    int MSECOND = msec - HOUR*36E5 - MINUTE*6E4 - SECOND*1E3;
    QTime TIME(HOUR, MINUTE, SECOND, MSECOND);
    QDateTime OUT(DATE, TIME);
    return OUT;
}

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QString"
#include "QDateTime"
#include "consts.h"
#include "gcs.h"
#include "jd.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    double RV[6] = {-6222.33369793414, 3251.49320190604, 533.308676242984, 0.992887228367863, 0.678519276136813, 7.42901079418331};
    double rot_par[4] = {37, 0.48482, 0, 0};
    QString DATE = "24/03/2017 00:00:00.000";
    QString FORM = "dd/MM/yyyy hh:mm:ss.zzz";
    QDateTime UTC = QDateTime::fromString(DATE, FORM);
    QDateTime UTC2 = JDtoUTC(2458223.0525463); 
}

Лог сборки:

22:55:07: Running steps for project GPC...
22:55:07: Configuration unchanged, skipping qmake step.
22:55:07: Starting: "C:\Qt\Qt5.10.1\Tools\mingw530_32\bin\mingw32-make.exe" 
C:/Qt/Qt5.10.1/Tools/mingw530_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/Qt Projects/build-GPC-Desktop_Qt_5_10_1_MinGW_32bit-Debug'
g++ -Wl,-subsystem,windows -mthreads -o debug\GPC.exe debug/main.o debug/mainwindow.o debug/extra_math.o debug/gcs.o debug/moc_mainwindow.o  -lmingw32 -LC:\Qt\Qt5.10.1\5.10.1\mingw53_32\lib C:\Qt\Qt5.10.1\5.10.1\mingw53_32\lib\libqtmaind.a -LC:\utils\my_sql\my_sql\lib -LC:\utils\postgresql\pgsql\lib -lshell32 C:\Qt\Qt5.10.1\5.10.1\mingw53_32\lib\libQt5Widgetsd.a C:\Qt\Qt5.10.1\5.10.1\mingw53_32\lib\libQt5Guid.a C:\Qt\Qt5.10.1\5.10.1\mingw53_32\lib\libQt5Cored.a 
debug/mainwindow.o: In function `ZN10MainWindow21on_pushButton_clickedEv':
C:\Qt Projects\build-GPC-Desktop_Qt_5_10_1_MinGW_32bit-Debug/../GPC/mainwindow.cpp:34: undefined reference to `JDtoUTC(double)'
collect2.exe: error: ld returned 1 exit status
Makefile.Debug:77: recipe for target 'debug\GPC.exe' failed
mingw32-make[1]: Leaving directory 'C:/Qt Projects/build-GPC-Desktop_Qt_5_10_1_MinGW_32bit-Debug'
Makefile:36: recipe for target 'debug' failed
mingw32-make[1]: *** [debug\GPC.exe] Error 1
mingw32-make: *** [debug] Error 2
22:55:08: The process "C:\Qt\Qt5.10.1\Tools\mingw530_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project GPC (kit: Desktop Qt 5.10.1 MinGW 32bit)
When executing step "Make"
22:55:08: Elapsed time: 00:01.
READ ALSO
Сортировка строк двумерного массива

Сортировка строк двумерного массива

Вечер добрый! Есть двумерный массив, в котором содержится n-ое количество строкКаждая строка представляет собой последовательность нулей...

181
Как закрыть процесс не затрагивая его дочерние процессы?

Как закрыть процесс не затрагивая его дочерние процессы?

Вопрос в шапке (C++, Visual Studio 17, Console Application) Сейчас понаедут знатоки которое напишут 2-3 слова "в кратце" но мне нужно ПОДРОБНОСпасибо

190
Сортировка массива структуры

Сортировка массива структуры

У меня есть структура

204