首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

怎么使用指针函数返回的对象

2013-10-31 
如何使用指针函数返回的对象先给一个简单的数据库链接代码,调试通过可以看到数据结果,给这个是为了避免有

如何使用指针函数返回的对象
先给一个简单的数据库链接代码,调试通过可以看到数据结果,给这个是为了避免有人以为我数据库配错了或者其他代码错了。


QSqlDatabase MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{

    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(Server);
    db.setUserName(UserName);
    db.setPassword(Password);
    db.setDatabaseName(Database);
    return db;
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
        QSqlDatabase db = iniDBConnect(QString("localhost"),QString("gxx"),QString(""),QString("information_schema"));
        bool bOpen = db.open();
//... 以下查询数据部分省略,结果界面上view内能看到数据。
}


好了我现在想把 iniDBConnect函数返回改成指针,现在代码改成以下格式,编译通过,运行到数据库open时liunx报系统底层错误,我想用qt的内存查看器查一下但是不会用,我不知道是为什么。请问哪位高手知道

QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{

    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(Server);
    db.setUserName(UserName);
    db.setPassword(Password);
    db.setDatabaseName(Database);
    return &db;
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    try
    {
        QSqlDatabase * db = iniDBConnect(QString("localhost"),QString("gxx"),QString(""),QString("information_schema"));
        bool bOpen = (*db).open(); //编译通过,执行这句代码时报liunx底层错误


如果有人能准确回答我会增加到100分的,虽然我觉得能真正回答这道题目的人应该不会在呼100分吧,先在此谢过。
[解决办法]
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
 
    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); // 此处db为局部变量,函数出栈后自动析构
    db.setHostName(Server);
    db.setUserName(UserName);
    db.setPassword(Password);
    db.setDatabaseName(Database);
    return &db; // 返回一个地址,返回后地址无效
}
[解决办法]
没明白你为啥非用返回指针,好了,你返回指针出可以,但不能返回&db这种方式,因为返回前db已经析构了。

 
 
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
 
    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(Server);
    db.setUserName(UserName);
    db.setPassword(Password);
    db.setDatabaseName(Database);
    
    return new QSqlDatabase(db);
}
 
 

 



[解决办法]
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
 
    QSqlDatabase* db = new QSqlDatabase::addDatabase("QMYSQL"); // 在堆上建立
    db.setHostName(Server);
    db.setUserName(UserName);
    db.setPassword(Password);
    db.setDatabaseName(Database);
    return db; // 返回一个地址,返回后地址依然有效,不过注意 手动 释放 db 

热点排行