@KeLaTy
C++ Developer

Почему компилятор не видит конструктор?

Вот пишу приложение для баз данных на Qt. И тут такое:
mainwindow.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl MyDb::MyDb(class QString,class QString,class QString,class QString)" (??0MyDb@@QEAA@VQString@@000@Z) в функции "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)

mainwindow.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl MyDb::~MyDb(void)" (??1MyDb@@QEAA@XZ) в функции "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)

NMAKE:-1: ошибка: U1077: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\link.EXE" : возвращенный код "0x460"

NMAKE:-1: ошибка: U1077: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\nmake.exe" : возвращенный код "0x2"


Я не понимаю от куда тут эти ошибки.
Вот код:

mydb.h
#ifndef MYDB_H
#define MYDB_H

#include <QtSql/QSqlError>
#include <QtSql/QSqlRecord>
#include <QDebug>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlTableModel>
#include <QtSql/QSqlQuery>


class MyDb
{
public:
    MyDb(const QString name,const QString host,const QString login,const QString pass);
    ~MyDb();
    QSqlDatabase db;
};

#endif // MYDB_H


mydb.cpp
#include "mydb.h"

MyDb::MyDb(const QString name,const QString host,const QString login,const QString pass)
{
    db = QSqlDatabase::addDatabase("QMYSQL");

    db.setDatabaseName(name);
    db.setHostName(host);
    db.setUserName(login);
    db.setPassword(pass);
    db.setPort(3306);

    if (!db.open()){
        QDebug() << db.lastError() << endl;
    } else {
       QDebug() << "Db opened!" << endl;
    }

}

MyDb::~MyDb() {

}


mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mydb.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    MyDb mdb("test","127.0.0.1","root","toor");

}

MainWindow::~MainWindow()
{
    delete ui;
}


Прошу помощи.
  • Вопрос задан
  • 895 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Нет, дело не в этом. Линкер не может найти среди OBJ-файлов конструктор MyDb::MyDb. Очевидно, mydb.cpp не скомпилировался или не подключён.
1) Убедиться, что mydb.cpp включён в проект. 2) Build → Run Qmake.

Гуглите понятие «единица трансляции» и что делает линкер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
greatRome
@greatRome
mati it
а что, теперь внешние файлы подключать не надо?

добавь в начало mainwindow.cpp
#include "mydb.h"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы