Проблема статического связывания в Qt с SQLite - PullRequest
1 голос
/ 27 декабря 2010

У меня проблема со статическим связыванием в моем приложении C ++.Я надеюсь, что вы можете помочь.Код для заголовка и источника ниже.

#ifndef PRACTICARDSDB_H
#define PRACTICARDSDB_H
#include "cardset.h"
#include "card.h"
#include "filter.h"

class PractiCardsDB
{
public:
    PractiCardsDB();
    static void resetAll();
    static void resetDates();
    static CardSet getCardSet();
    static CardSet getCardSet(Filter filter);
    static void addCard(Card card);
    static void editCard(Card card);
    static void deleteCard(Card card);
    static bool createConnection();

};

#endif // PRACTICARDSDB_H

Выше находится заголовочный файл, а ниже - исходный файл.

#include "practicardsdb.h"
#include <QtSql/QSqlDatabase>
#include <QMessageBox>

PractiCardsDB::PractiCardsDB() {}
static bool PractiCardsDB::createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("EnglishSpanish");
    if (!db.open())
    {
        return false;
    }
    return true;
}

Я получаю сообщение об ошибке: невозможно объявить функцию-член «static bool PractiCardsDB :: createConnection ()» статической связью.Любая помощь?

Я использую Qt 4.7 с C ++ внутри Qt Creator, если это поможет.

Ответы [ 2 ]

4 голосов
/ 27 декабря 2010

Когда вы определяете функцию-член static отдельно от объявления, вам не нужно использовать модификатор static.

bool PractiCardsDB::createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("EnglishSpanish");
    if (!db.open())
    {
        return false;
    }
    return true;
}

Также вы действительно хотите сделать каждую функцию вашегокласс static?Ваш класс представляет собой базу данных сортами для Card объектов, поэтому я думаю, что вы на самом деле хотите хранить данные членов с самим классом?

Даже в этом фрагменте выше вы создаете объект QSqlDatabaseно существование db является лишь степенью функции createConnection().

2 голосов
/ 27 декабря 2010

Удалить static decleration из вашего cpp файла, оно должно быть только в файле header.Нравится:

bool PractiCardsDB::createConnection()
{
 ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...