Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在QT中使用构造函数对对象进行初始化,没有要调用的匹配函数_C++_Mysql_Qt_Type Conversion - Fatal编程技术网

C++ 在QT中使用构造函数对对象进行初始化,没有要调用的匹配函数

C++ 在QT中使用构造函数对对象进行初始化,没有要调用的匹配函数,c++,mysql,qt,type-conversion,C++,Mysql,Qt,Type Conversion,我将Mysql 5.6与Qt5一起使用,并创建一个类来封装数据库连接。 当我尝试在main中创建一个对象时,使用dbconnectconn=newdbconnect(“localhost”、“test1”、“test”、“user”)我得到一个错误,告诉我需要从dbConnect*转换为非标量类型。 阅读我所看到的其他帖子可能是因为我尝试的类型化,因为它不是C++中的一个好的实践,应该像“代码> dBut连接CONN(“本地主机”,“TEST 1”,“测试”,“用户”);代码>但是,这样更改它,

我将Mysql 5.6与Qt5一起使用,并创建一个类来封装数据库连接。
当我尝试在main中创建一个对象时,使用
dbconnectconn=newdbconnect(“localhost”、“test1”、“test”、“user”)我得到一个错误,告诉我需要从
dbConnect*
转换为非标量类型。
阅读我所看到的其他帖子可能是因为我尝试的类型化,因为它不是C++中的一个好的实践,应该像“代码> dBut连接CONN(“本地主机”,“TEST 1”,“测试”,“用户”);代码>但是,这样更改它,我现在得到的不是转换错误,而是一个
无匹配函数,用于调用QSqlDatabase::setHosTname(std::string&)
,与连接所需的其他方法相同,如setDatabaseName、setUserName和setPassword
可能是因为我使用的
std::string
吗? 或者我应该如何创建对象
这是m y头
db.h

#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_
#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;
        }
    }
};
更新

以@gengisdave和@R Sahu解决方案为例,现在我正尝试在main中创建一个对象。如果我尝试
dbconnectconn()即使构造函数使用paremeter,它也可以正常工作,但是如果我尝试使用dbconnectconn(“localhost”、“test1”、“test”、“user”)编译器向我提供了一个对dbConnect::dbConnect(std::string,std::string,std::string,std::string,std::string)的
未定义引用的错误:

dbConnect conn = new dbConnect("localhost", "test1","test","user");
右侧为
dbConnect*
型,左侧为
dbConnect
型。这是不对的。编译器无法获取指针并将其分配给对象

您可以使用:

dbConnect* connPtr = new dbConnect("localhost", "test1","test","user");

其他问题

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;
    }
}
这是不对的。您可能需要:

bool createConnection(std::string host, std::string name,std::string user, std::string pass)
{
    // Since this class is derived from QSqlDatabase,
    // you can use:
    this->addDatabase("QMYSQL");
    this->setHostName(QString::fromStdString(host));
    this->setDatabaseName(QString::fromStdString(name));
    this->setUserName(QString::fromStdString(user));
    this->setPassword(QString::fromStdString(pass));
    if(!this->open())
    {
        return false;
    }
    else
    {
        return true;
    }
}
另外,删除成员变量

  QSqlDatabase dbObject;
您不需要它,因为类已经从
QSqlDatabase
派生。只有当您使用以下内容时,不从
QSqlDatabase

派生时,才需要使用该选项:

dbConnect conn = new dbConnect("localhost", "test1","test","user");
右侧为
dbConnect*
型,左侧为
dbConnect
型。这是不对的。编译器无法获取指针并将其分配给对象

您可以使用:

dbConnect* connPtr = new dbConnect("localhost", "test1","test","user");

其他问题

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;
    }
}
这是不对的。您可能需要:

bool createConnection(std::string host, std::string name,std::string user, std::string pass)
{
    // Since this class is derived from QSqlDatabase,
    // you can use:
    this->addDatabase("QMYSQL");
    this->setHostName(QString::fromStdString(host));
    this->setDatabaseName(QString::fromStdString(name));
    this->setUserName(QString::fromStdString(user));
    this->setPassword(QString::fromStdString(pass));
    if(!this->open())
    {
        return false;
    }
    else
    {
        return true;
    }
}
另外,删除成员变量

  QSqlDatabase dbObject;
您不需要它,因为类已经从
QSqlDatabase
派生。只有当您不是从
QSqlDatabase

派生时,才需要使用它,而您需要提供一个std::string类型的参数;接下来的3行也一样

您可以将该行更改为

this->setHostName(QString::fromStdString(host));
this->setDatabaseName(QString::fromStdString(name));
this->setUserName(QString::fromStdString(user));
this->setPassword(QString::fromStdString(pass));
编辑:工作正常

main.cpp

#include <QApplication>
#include "db.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    dbConnect connection("localhost", "test1", "test", "user");
    dbConnect *conn = new dbConnect("localhost", "test1", "test", "user");
}
#包括
#包括“db.h”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
dbConnect连接(“localhost”、“test1”、“test”、“user”);
dbConnect*conn=newdbconnect(“localhost”、“test1”、“test”、“user”);
}
db.cpp

#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>
#include "db.h"

dbConnect::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 dbConnect::createConnection(std::string host, std::string name,std::string user, std::string pass)
{
    this->dbObject = QSqlDatabase::addDatabase("QMYSQL");
    this->dbObject.setHostName(QString("localhost"));
    this->dbObject.setDatabaseName(QString("test.txt"));
    this->dbObject.setUserName(QString("test"));
    this->dbObject.setPassword(QString("test"));
    return this->dbObject.open();
}
#包括
#包括
#包括
#包括“db.h”
dbConnect::dbConnect(std::string主机、std::string名称、std::string用户、std::string传递)
{
if(createConnection(主机、名称、用户、过程))
QMessageBox::信息(0,“连接状态”,“与数据库建立连接”);
其他的
QMessageBox::critical(0,QObject::tr(“连接到数据库时出错”)、dbObject.lastError().text();
}
bool dbConnect::createConnection(std::string主机、std::string名称、std::string用户、std::string传递)
{
这->dbObject=QSqlDatabase::addDatabase(“QMYSQL”);
这->dbObject.setHostName(QString(“localhost”);
这->dbObject.setDatabaseName(QString(“test.txt”);
这个->dbObject.setUserName(QString(“test”);
这个->dbObject.setPassword(QString(“test”);
返回此->dbObject.open();
}
db.h

\ifndef DB\u H
#定义DB_H
#包括
#包括
类dbConnect:QSqlDatabase
{
公众:
dbConnect(std::string主机、std::string名称、std::string用户、std::string传递);
boolcreateconnection(std::string主机、std::string名称、std::string用户、std::string传递);
私人:
qsqldbobject数据库;
};
#恩迪夫
编译时使用:
gcc db.cpp main.cpp-I/usr/include/qt5/QtSql-I/usr/include/qtwidts-I/usr/include/qt5-fPIC-o main-lstdc++-lQt5Sql-lQt5Core-lQt5Widgets
需要QString类型的参数,而提供std::string;接下来的3行也一样

您可以将该行更改为

this->setHostName(QString::fromStdString(host));
this->setDatabaseName(QString::fromStdString(name));
this->setUserName(QString::fromStdString(user));
this->setPassword(QString::fromStdString(pass));
编辑:工作正常

main.cpp

#include <QApplication>
#include "db.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    dbConnect connection("localhost", "test1", "test", "user");
    dbConnect *conn = new dbConnect("localhost", "test1", "test", "user");
}
#包括
#包括“db.h”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
dbConnect连接(“localhost”、“test1”、“test”、“user”);
dbConnect*conn=newdbconnect(“localhost”、“test1”、“test”、“user”);
}
db.cpp

#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>
#include "db.h"

dbConnect::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 dbConnect::createConnection(std::string host, std::string name,std::string user, std::string pass)
{
    this->dbObject = QSqlDatabase::addDatabase("QMYSQL");
    this->dbObject.setHostName(QString("localhost"));
    this->dbObject.setDatabaseName(QString("test.txt"));
    this->dbObject.setUserName(QString("test"));
    this->dbObject.setPassword(QString("test"));
    return this->dbObject.open();
}
#包括
#包括
#包括
#包括“db.h”
dbConnect::dbConnect(std::string主机、std::string名称、std::string用户、std::string传递)
{
if(createConnection(主机、名称、用户、过程))
QMessageBox::信息(0,“连接状态”,“与数据库建立连接”);
其他的
QMessageBox::critical(0,QObject::tr(“连接到数据库时出错”)、dbObject.lastError().text();
}
bool dbConnect::createConnection(std::string主机、std::string名称、std::string用户、std::string传递)
{
这->dbObject=QSqlDatabase::addDatabase(“QMYSQL”);
这->dbObject.setHostName(QString(“localhost”);
这->dbObject.setDatabaseName(QString(“test.txt”);
这个->dbObject.setUserName(QString(“test”);
这个->dbObject.setPassword(QString(“test”);
返回此->dbObject.open();
}
db.h

\ifndef DB\u H
#定义DB_H
#包括
#包括
类dbConnect:QSqlDatabase
{
公众:
dbConnect(std::string主机、std::string名称、std::string用户、std::string传递);
boolcreateconnection(std::string主机、std::string名称、std::string用户、std::string传递);
私人:
qsqldbobject数据库;
};
#结束