gpt4 book ai didi

c++ - 调用方法后应用程序崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:56 25 4
gpt4 key购买 nike

我想从我的 MainWindow 类中名为 DB 的类中存在的函数返回一个 QString 值,但它总是崩溃申请。

db.h

#ifndef DB_H
#define DB_H

#include <QMainWindow>
#include <QtSQl>
#include <QSqlQuery>
#include <QSqlError>
#include <QObject>
#include <QDialog>

class DB : public QMainWindow
{
Q_OBJECT
public:
explicit DB(QWidget *parent = 0);

QString getDriver() const;
void setDriver(const QString &value);

private:
QString Driver="test";

signals:

public slots:
};

#endif // DB_H

这是db.cpp

#include "db.h"

DB::DB(QWidget *parent) : QMainWindow(parent)
{

}

QString DB::getDriver() const
{
return Driver;
}


void DB::setDriver(const QString &value)
{
Driver = value;
}

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QFileInfo>
#include <QDialog>
#include <QObject>
#include "Db.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
DB *conn;

private slots:
void on_pushButton_clicked();

private:
Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QString driverfromdb = conn->getDriver();
qDebug() << driverfromdb;
}

这就是当我点击按钮时发生的事情:image

最佳答案

您在 MainWindow 类中声明了一个指向 DB 类的指针

DB *conn;

但你从未初始化它。目前它没有指向任何东西,所以如果您尝试访问它:

QString driverfromdb = conn->getDriver(); // boom, conn is somewhere in the void

解决方法很简单,在使用前需要先创建一个DB对象,例如:

void MainWindow::on_pushButton_clicked()
{
conn = new DB();
QString driverfromdb = conn->getDriver();
qDebug() << driverfromdb;
}

或者让 conn 成为一个典型的变量,而不是一个指针:

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
DB conn; // conn is created after creating MainWindow object

这样你就不必初始化任何东西,你会避免崩溃。

关于c++ - 调用方法后应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38555533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com