2010-11-19 30 views
1

ile "tanımsız başvuru":aşağıdaki kod ile tekil

class DBConnection 
{ 
// Methodes : private 
    private: 
     // Constructeur 
     DBConnection(); 

     // Destructeur 
     ~DBConnection(); 

// Methodes : public 
    public: 
     bool open(); 
     bool close(); 

// Methodes : public : static 
    public: 
     static DBConnection * getSingleton(); 

// Variables 
    private: 
     static DBConnection * singleton; 

     QSqlDatabase conn; 

     QString   driver, 
         host, 
         userName, 
         password, 
         DBName; 
}; 
#endif // DBCONNECTION_HPP 

#include "DBConnection.hpp" 

// Initialisation du singleton dans l'espace global, car static 
    DBConnection * DBConnection::singleton = 0; 

// Methodes : private 
    DBConnection::DBConnection() { 
     this->conn = QSqlDatabase::addDatabase("QMYSQL"); 
      this->conn.setHostName(""); 
      this->conn.setUserName(""); 
      this->conn.setPassword(""); 
      this->conn.setDatabaseName(""); 
    } 

    DBConnection::~DBConnection(){}; 

// Methodes : public 
    bool DBConnection::open() { 
     bool rep = this->conn.isOpen()?true:this->conn.open(); 

     if(!rep) 
      QMessageBox::critical(0, "Erreur critique !", "Impossible d'ouvrir la base de données !"); 

     return rep; 
    } 

DBConnection * DBConnection::getSingleton() { 
     if(singleton == 0) 
      singleton = new DBConnection; 
     return singleton; 
    } 

#ifndef DAOMYSQLFACTORY_HPP 
#define DAOMYSQLFACTORY_HPP 

#include "InterfaceDAOFactory.hpp" 
#include "DAO.hpp" 

class DAOMySQLFactory : public InterfaceDAOFactory 
{ 
// Methodes : private 
    private: 
     // Constructeur 
     DAOMySQLFactory(); 

     // Destructeur 
     ~DAOMySQLFactory(); 
// Methodes : public : heritées 
    public: 
     DAO * getDAOClient(); 

     DAO * getDAOSite(); 

     DAO * getDAOMachine(); 

// Methode : static 
    public: 
     static DAOMySQLFactory * getSingleton(); 

// Variables 
    private: 
     // Instance unique 
     static DAOMySQLFactory * singletonMySQLFactory; 
}; 

#endif // DAOMYSQLFACTORY_HPP 

#include "DAOMySQLFactory.hpp" 
#include "DBConnection.hpp" 
#include "DAOMySQLClient.hpp" 


DAOMySQLFactory * DAOMySQLFactory::singletonMySQLFactory = 0; 

// Methodes : private 
    // Constructeur 
    DAOMySQLFactory::DAOMySQLFactory() {} 
    // Destructeur 
    DAOMySQLFactory::~DAOMySQLFactory() {} 

// Methode : static 
    DAOMySQLFactory * DAOMySQLFactory::getSingleton() { 
     if(singletonMySQLFactory == 0) 
      singletonMySQLFactory = new DAOMySQLFactory; 
     return singletonMySQLFactory; 
    } 

// Methodes : public : heritee 

    DAO * DAOMySQLFactory::getDAOClient() { 
     return 0; 
    } 
... 

#include <QApplication> 

#include "WinMain.h" 

//TEST 
#include "DAOPersistenceFactory.hpp" 
#include "DAO.hpp" 
#include "DAOMySQLFactory.hpp" 
#include "DBConnection.hpp" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

//TEST 
    InterfaceDAOFactory * idao = DAOPersistenceFactory::getDAOFactory(DAOPersistenceFactory::MySQL); 
    DAO * d = idao->getDAOClient(); 
    DBConnection::getSingleton(); 


    WinMain fen; 
    fen.show(); 

    return app.exec(); 
} 

#ifndef DAO_HPP 
#define DAO_HPP 

#include <QString> 
#include <QStringList> 
#include <QSqlQuery> 

class DAO { 
// Methodes : public 
    public: 
     DAO(); 
     virtual ~DAO(); 

// Methodes : public : abstraites 
    public: 
     virtual QStringList findAll() = 0; 

// Variable 
    protected: 
     QSqlQuery allQuery; 
}; 

#endif // DAO_HPP 

#include "DAO.hpp" 

DAO::DAO() {} 

DAO::~DAO(){} 
#ifndef DAOMYSQLCLIENT_HPP 
#define DAOMYSQLCLIENT_HPP 

#include <QString> 
#include <QStringList> 
#include <QSqlQuery> 

#include "DAO.hpp" 
#include "DBConnection.hpp" 

class DAOMySQLClient : public DAO 
{ 

// Methodes : public 
    public: 
     DAOMySQLClient(); 
    // DAOMySQLClient(DBConnection * connection); 
//Variables 
    private: 
     DBConnection * conn; 

     QSqlQuery  byIdQuery, 
         byNameQuery; 
}; 

#endif // DAOMYSQLCLIENT_HPP 

#include <QMessageBox> 
#include <QSqlError> 
#include <QVariant> 

#include "DAOMySQLClient.hpp" 


// Methodes : public 
    // Constructeur 
    DAOMySQLClient::DAOMySQLClient() {} 

    // Constructeur 
// DAOMySQLClient::DAOMySQLClient(DBConnection * connection) { 
//  this->conn = connection; 
//  this->conn->open(); 
//  initQueries(); 
// } 

... 


Neden ben bir

var 3212

, main() ve DAOPersistenceFactory::getDAOFactory(DAOPersistenceFactory::MySQL); ile aynı uygulamaya sahip gibi görünmüyor mu?

+1

Bağlantı adımını gerçekleştirmek için kullandığınız gcc komut satırını gösterebilir misiniz? –

+0

Tüm dosyaları koyabilir misin? Dosya korumaları eksik. – Klaim

+0

@ Klaim Edited – canardman

cevap

1

ben size .pro dosyaya DBConnection.cpp eklemeyi unuttuğu bir his var. Yaptıysanız, qmake'yi yeniden çalıştırmayı deneyin. Ayrıca make clean'u da deneyin.

Geçmişte güncel olmayan nesne dosyalarıyla ilgili birçok tuhaf sorun vardı. ;)

+0

Tamam! Çok haklısın :) Ama garip, kendimi .pro'yu değiştirmek zorunda kaldım çünkü Qt Creator'dan Qmake çalıştırdığımda .pro – canardman

+0

'u değiştiremedi Bazen garip şeyler oluyor. Sadece% 99 "tanımlanmamış referans" hatalarının genellikle iki kaynaktan geldiğini unutmayın: 1) eksik, bağlantılı olmayan bir kütüphane; 2) eksik bir .cpp/nesne dosyası. İyi ki yardım edebilirim. :) – BastiBen

+0

Evet, not alıyorum;), teşekkürler, teşekkürler. – canardman

İlgili konular