Qt中的静态链接问题与SQLite

时间:2010-12-27 14:06:45

标签: c++ qt static

我的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 Creator中使用Qt 4.7和C ++。

2 个答案:

答案 0 :(得分:4)

当您与声明分开定义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()函数的范围。

答案 1 :(得分:2)

static文件中删除cpp声明,它应该只在header文件中。像:

bool PractiCardsDB::createConnection()
{
 ....
}