Russian Qt Forum
Ноябрь 25, 2024, 00:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание класса!  (Прочитано 3815 раз)
rezor
Гость
« : Январь 15, 2011, 20:54 »

При добавлении класса для работы с БД всплывают ошибки!
Код:
mainwindow.o: In function `DatabaseAccessor':
/home/stas/MyDB/mainwindow.cpp:33: undefined reference to `DatabaseAccessor::dbHost'
/home/stas/MyDB/mainwindow.cpp:34: undefined reference to `DatabaseAccessor::dbName'
/home/stas/MyDB/mainwindow.cpp:35: undefined reference to `DatabaseAccessor::dbUser'
/home/stas/MyDB/mainwindow.cpp:36: undefined reference to `DatabaseAccessor::dbPass'
/home/stas/MyDB/mainwindow.cpp:33: undefined reference to `DatabaseAccessor::dbHost'
/home/stas/MyDB/mainwindow.cpp:34: undefined reference to `DatabaseAccessor::dbName'
/home/stas/MyDB/mainwindow.cpp:35: undefined reference to `DatabaseAccessor::dbUser'
/home/stas/MyDB/mainwindow.cpp:36: undefined reference to `DatabaseAccessor::dbPass'
collect2: ld returned 1 exit status
make: Выход из каталога `/home/stas/MyDB'
make: *** [MyDB] Ошибка 1
Завершено с кодом 2.
Ошибка во время сборки проекта MyDB
Во время выполнения сборки на этапе 'Make'

.pro
Код:
# -------------------------------------------------
# Project created by QtCreator 2011-01-13T19:05:29
# -------------------------------------------------
QT += sql
TARGET = MyDB
TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void changeEvent(QEvent *e);
    void create_menu();
private:
    Ui::MainWindow *ui;
};


class DatabaseAccessor
{
   
public:
    static DatabaseAccessor* getInstance();
    static QString dbHost;
    static QString dbName;
    static QString dbUser;
    static QString dbPass;
private:
    DatabaseAccessor();
    DatabaseAccessor(const DatabaseAccessor& );
    DatabaseAccessor& operator=(const DatabaseAccessor& );
    QSqlDatabase db;
};
#endif // MAINWINDOW_H

main.cpp
Код:
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

}

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

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

DatabaseAccessor::DatabaseAccessor()
{

    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(dbHost);
    db.setDatabaseName(dbName);
    db.setUserName(dbUser);
    db.setPassword(dbPass);
    if (db.open())
    {
        qDebug("connected to database");
    }
    else
    {
        qDebug("Error occured in connection to database");
    }
}

DatabaseAccessor* DatabaseAccessor::getInstance()
{
    static DatabaseAccessor instance;
    return &instance;
}
Записан
BRE
Гость
« Ответ #1 : Январь 15, 2011, 21:00 »

Почитай в книгах по C++ как и где определяются статические переменные класса или воспользуйся поиском по форуму.

Записан
rezor
Гость
« Ответ #2 : Январь 15, 2011, 21:24 »

Да спасибо ошибка в static членах! Буду читать как исправить!
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Январь 15, 2011, 21:27 »

по-моему класс DatabaseAccessor лишний в этом коде.
Записан

Юра.
rezor
Гость
« Ответ #4 : Январь 15, 2011, 21:36 »

Почему?? Это только описание дальше буду дорабатывать!
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Январь 16, 2011, 11:30 »

>>Почему??
судя по статическим полям.

Все эти поля можно в любой момент спросить у QSqlDatabase. Ты заметил что у этого класса используются статические методы для создания соединения и доступа к нему?
Записан

Юра.
rezor
Гость
« Ответ #6 : Январь 16, 2011, 17:15 »

Конечно заметил! Так что лучше просто оформить функцию подключению и дальше получать данные!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 22.