2016-07-24 7 views
2

クラスDBというクラスにあるQStringの値を、MainWindowクラスに戻したいと思っていますが、アプリケーションが常にクラッシュします。メソッド呼び出し後にクラッシュするアプリケーション

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; 
} 

mainwindow.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 

mainwindow.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

+4

あなたは 'conn'を割り当てていますか?あなたが投稿したコードには割り当てが見つかりません。 –

+1

@Farini情報に感謝私はタグを変更しました:)申し訳ありません^^ –

+0

@MichaWiedenmann私はDbからconnを作成しましたので、私は関数を呼び出すことができます! –

答えて

0

あなたのMainWindowクラス

DB *conn; 

DBクラスへのポインタを宣言しているが、あなたが初期化されませんそれ。あなたがそれにアクセスしようとするので、もし現時点では、何を指していません。

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 

あなたは何を初期化するために、あなたがクラッシュを避けることができます持っていないこの方法です。

0

か:

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


MainWindow::~MainWindow() 
{ 
delete conn; 
    delete ui; 
} 
関連する問題