[gelöst] Programmabsturz

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

[gelöst] Programmabsturz

Beitrag von nexus »

Hallo,

main Programm sieht folgender maßen aus (dazu kommen noch die ui files die mit dem Designer erstellt wurden)

dialog.h

Code: Alles auswählen

#ifndef DIALOG_H
#define DIALOG_H

#include <QtGui/QWidget>
#include "ui_dialog.h"

class Dialog : public QWidget
{
    Q_OBJECT

	public:
		Dialog(QWidget *parent);
		~Dialog();
		Ui::EingabeDialog ui;

    private slots:
		void ok();

    private:

};

#endif // DIALOG_H
dialog.cpp

Code: Alles auswählen

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
{
	ui.setupUi(this);
	connect(ui.okButton, SIGNAL(clicked()), this, SLOT(ok()));
}

void Dialog::ok(){
	ui.lineEdit->setText("Ok");
}

Dialog::~Dialog()
{

}
mainwindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_

#include "ui_mainwindow.h"
#include "dialog.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

	public:
		MainWindow();
		~MainWindow();

    private slots:
		void cancel();

    private:
    	Ui::MainWindow ui;
    	Dialog *d;
};

#endif /* MAINWINDOW_H_ */
mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"


MainWindow::MainWindow(){
	ui.setupUi(this);
	Dialog *d = new Dialog(this);
	QGridLayout *lay = new QGridLayout();
	lay->addWidget(d);
	ui.tab1->setLayout(lay);

	connect(d->ui.cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
}

void MainWindow::cancel(){
	d->ui.lineEdit_2->setText("Cancel");
}

MainWindow::~MainWindow(){

};
Sobald nun jedoch auf den cancelButton geklickt wird stürzt das Programm ab und ich hab keine Ahnung wiso...
Zuletzt geändert von nexus am 24. Oktober 2008 23:46, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

d ist uninitialisiert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

d wird doch initialisiert

Code: Alles auswählen

Dialog *d = new Dialog(this);
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das d meinte ich ja nicht! Ich meinte das d in MainWindow::cancel()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

das wird doch durch das andere initialisiert ist ja das selbe d oder nicht? das steht ja in der gesamten klasse zur verfügung

edit: hast recht stand grad voll auf dem schlauch
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag von gerome69 »

nexus hat geschrieben:das wird doch durch das andere initialisiert ist ja das selbe d oder nicht? das steht ja in der gesamten klasse zur verfügung
Dann müßte im Konstruktor von MainWindow stehen:
d = new Dialog(this);

Du schreibst dort aber:
Dialog *d = new Dialog(this);

Und dieses d hat nichts mit dem Zeiger "d" in der Klasse zu tun und ist nach dem Beenden des Konstruktor auch wieder weg. Stichwort: "variable scope".

Gruß, Gérôme
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

ja genau, dass hatte ich dann auch bemerkt ;-)
Antworten