2010-12-27 9 views
1

私のC++アプリケーションに静的なリンクの問題があります。私はあなたが助けることを望んでいます。以下のヘッダーとソースのコード。QtでのSQLiteによる静的リンクの問題

#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; 
} 

私は受信エラーがある:静的なリンケージを持つように「静的PractiCardsDB BOOL ::のcreateConnection()」メンバ関数を宣言することはできません。どんな助け?

Qt Creator内でC++でQt 4.7を使用しています。

+0

私はちょうど実際に完全なコンパイルエラーを見る方法を考え出しました。私はSQLライブラリへの参照が不足しているように見えます。私は以前これについて言及している別の問題を見たので、.proファイルにQT + = sqlを追加しました。皆さんありがとう。 Qt初心者の問題で申し訳ありません。 – Awaken

答えて

4

宣言と別にメンバー関数staticを定義すると、static修飾子を使用する必要はありません。

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

また、実際にクラスのすべての機能を1つずつ作成することを意味しますか。static?あなたのクラスはCardオブジェクトのソートのデータベースを表していますので、実際にクラス自体にメンバーデータを格納したいと思いますか?

上記のスニペットでも、QSqlDatabaseオブジェクトを作成しますが、dbの存在はcreateConnection()の機能の範囲にすぎません。

+0

迅速な対応をありがとう。余分な静的を削除して、新しいエラーが発生しました::: error:collect2:ldは1つの終了ステータスを返しました。私は実際にこれをC#からQtのC++に変換しようとしています。だから、どうやってやるのか気にしません。今、私は自分のCardSetクラスがすべてのデータベースアクセスを制御しているので、DBはCardSetにあるものをミラーリングし、静的にC#バージョンでうまくいきました。 – Awaken

+0

@Awaken - 'ld returned 1 exit status'メッセージは通常、コンパイル時にシンボルが欠けていることを意味します。あなたはあなたが持っているQtライブラリにリンクしていますか? qmake .proファイルを使用していますか? – birryree

+0

それはそれだった。 + = sqlをproファイルに追加すると、それはうまくいきました。 – Awaken

2

cppファイルからstaticデクリレーションを削除する場合は、headerファイルにのみ含める必要があります。 Like:

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

余分な静的を削除しました。新しいエラー::: error:collect2:ldが1の終了ステータスを返しました – Awaken

+0

完全なエラーをポストすると、思われるいくつかのライブラリがありません。 – ismail

+0

私は自分のプロジェクトにsqlを追加する必要がありました。 – Awaken

関連する問題