我使用MySQL 5.6 QT5並創建一個類來封裝數據庫連接。
當我嘗試在dbConnect conn = new dbConnect("localhost", "test1","test","user");
的主體中創建一個對象時,我得到並顯示錯誤,告訴我我需要從dbConnect*
轉換爲非標量類型。
閱讀其他帖子我見過這可能是由於官方類型我試圖,因爲它不是一個很好的做法,在C + +應該是像dbConnect conn("localhost", "test1","test","user");
但改變它是這樣的,而不是得到轉換錯誤我現在得到一個no matching function for call to QSqlDatabase::setHosTname(std::string&)
和相同的連接所需的其他方法,如setDatabaseName,setUserName和setPassword
難道是因爲我使用std::string
? 或者我應該如何創建對象?
這是我的頭db.h
:
與QT構造對象inicialization,沒有匹配的函數調用
#ifndef DB
#define DB
#include <QSqlDatabase>
#include <string>
class dbConnect:QSqlDatabase
{
public:
dbConnect(std::string host, std::string name,std::string user, std::string pass);
bool createConnection(std::string host, std::string name,std::string user, std::string pass);
private:
QSqlDatabase dbObject;
};
#endif // DB_
下一頁這是它的實現db.cpp
:
#include<QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>
class dbConnect:QSqlDatabase
{
private:
QSqlDatabase dbObject;
public:
dbConnect(std::string host, std::string name,std::string user, std::string pass)
{
if(createConnection(host, name, user, pass))
{
QMessageBox::information(0,"Connection Status","Connection established with database");
}
else
{
QMessageBox::critical(0,QObject::tr("Error connecting to database"),dbObject.lastError().text());
}
}
bool createConnection(std::string host, std::string name,std::string user, std::string pass)
{
dbObject = QSqlDatabase::addDatabase("QMYSQL");
dbObject.setHostName(host);
dbObject.setDatabaseName(name);
dbObject.setUserName(user);
dbObject.setPassword(pass);
if(!dbObject.open())
{
return false;
}
else
{
return true;
}
}
};
UPDATE
接過@gengisdave和@R薩胡的解決方案,現在我試圖在主體中創建一個對象。如果我嘗試dbConnect conn();
它工作正常,即使構造花費paremeter但是,如果我trye dbConnect conn("localhost","test1","test","user");
編譯器給我的undefined reference to dbConnect::dbConnect(std::string,std::string,std::string,std::string)
錯誤。
謝謝夥計!我從一開始就認爲我會遇到QString的問題,這就是我使用std :: string的原因,但這是所有這些的原因。 –
好的,不是真的,現在如果我創建了dbConnect的對象,如'dbConnect conn(「localhost」,「test1」,「test」,「user」);'編譯器說:'未定義的引用dbConnect :: dbConnect(std :: string,std :: string,std :: string,std :: string)但是,構造函數被聲明爲應該,不是嗎? –
你不需要在.cpp文件中重新定義你的類,改爲'dbConnect :: dbConnect' – gengisdave