2010-12-27 2 views
1

내 C++ 응용 프로그램에서 정적 연결 문제가 있습니다. 네가 도울 수 있기를 바래. 아래 헤더 및 소스에 대한 코드.SQLite로 Qt의 정적 링크 문제

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

I 나타나는 오류는 다음과 같습니다 정적 연결을 가지고 '정적 PractiCardsDB 부울 :: 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; 
} 

또한 당신은 정말 클래스 static의 모든 단일 기능을 의미합니까? 귀하의 클래스는 Card 개체에 대한 정렬 데이터베이스를 나타내므로 클래스 데이터와 함께 구성원 데이터를 실제로 저장하고 싶습니다.

위의 스 니펫에서도 QSqlDatabase 개체를 만들지 만 db의 존재는 createConnection()의 범위에 불과합니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 여분의 정적을 제거하고 이제는 새로운 오류가 있습니다. :: 오류 : 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 파일에만 있어야합니다. 좋아요 :

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

여분의 정적이 제거되었습니다. 새로운 오류 :: :: 오류 : collect2 : ld가 1 종료 상태를 반환했습니다 – Awaken

+0

전체 오류를 게시하면 보이는 일부 라이브러리가 누락되었습니다. – ismail

+0

예. 내 프로젝트에 SQL을 추가해야했습니다. – Awaken