使用以下代码:
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();
// }
...
为什么我有
undefined reference to 'DBConnection::getSingleton()'
collect2:ld returned 1 exit status
在main()
和DAOPersistenceFactory::getDAOFactory(DAOPersistenceFactory::MySQL);
中没有,而它似乎有相同的实现?
答案 0 :(得分:1)
我觉得您忘了将 DBConnection.cpp 添加到 .pro 文件中。
如果你这样做,请尝试重新运行qmake。也请尝试make clean
。
过去我对过时的目标文件有很多奇怪的问题。 ;)