Zeigerproblem (kein Compilerfehler) in QtÜbung [close]
-
ok, dann änder ich das mal und lese in meinem Buch nochmal Initialisierungslisten nach... Kann aber sein das ich mich erst übermorgen melde ob es funktioniert, da ich jetzt dann Besuch kriege

Das mit dem setupUi lass ich lieber, weil mit Qt habe ich jetzt erst vor einem halben Jahr angefangen und weiß folglich noch weniger als in C++
und ich möchte jetzt lieber nicht noch nen QtExperten von euch vollnerven...
-
habe jetzt noch geschafft, die Fehler auszubessern, habe aber leider neue Fehler bekommen während ich den Ersten noch lösen konnte

funktioniert irgendetwas mit deiner Initialisierungsliste nicht...meine main sieht jetzt so aus:
... class Registration *Regis; int main(int argc, char *argv[]) { QApplication app(argc, argv); Startfenster *Start = new Startfenster(Regis); Check *check = new Check(Regis); Registration *Regis = new Registration(Start, check); Start->ini(); Regis->ini(); check->ini(); Start->show(); ...Fehler ist folgender: startfenster.cpp:10: error: '((Startfenster*)this)->Startfenster::Regi' cannot be used as a function
sieht genau wie in deinem Post aus, außer das ich das setupUi gelassen habeNoch eine Frage in den richtigen Programmen sind dann die init-Dataien was wir jetzt als Funktion gemacht haben?
-
wit schrieb:
Fehler ist folgender: startfenster.cpp:10: error: '((Startfenster*)this)->Startfenster::Regi' cannot be used as a function
Code? Die Meldung besagt, dass du etwas (nämlich Regi) wie eine Funktion benutzt, was aber keine Funktion ist. (und auch keinen operator() hat)
sieht genau wie in deinem Post aus, außer das ich das setupUi gelassen habe
genauso nur ganz anders?

-
nun dann habe ich anscheinend das lesen verlernt

also bei mir sieht's so aus:Startfenster.cpp
Startfenster::Startfenster(Registration *inRegis, QWidget *parent) : QDialog(parent), ui(new Ui::Startfenster) { ui->setupUi(this); Regi(inRegis); }Mir fällt grad auf, dass du kein Semikolon gemacht hast, aber jetzt habe ich fast keine Zeit mehr, verdammt
-
Ich seh zwar immernoch nicht, was Regi sein soll, aber ich rate einfach mal, dass das der Registration-Pointer ist, der in den vorherigen Codebeispielen ptr hieß.
Und ich vermute mal dass du ihn mit dem übergebenen Wert von inRegis belegen willst. Wie du es aufrufst, ist es eine Initialisierung, die muss aber in die Initialisierungsliste. Im Konstruktor-Rumpf gibts nurnoch Zuweisungen, keine Initialisierungen mehr. Richtig wäre also:Startfenster::Startfenster(Registration *inRegis, QWidget *parent) : QDialog(parent), ui(new Ui::Startfenster), Regi(inRegis) //<-- initialisierung! { ui->setupUi(this); }Oder (weniger guter Stil)
Startfenster::Startfenster(Registration *inRegis, QWidget *parent) : QDialog(parent), ui(new Ui::Startfenster) //Regi wird nicht initialisiert... { ui->setupUi(this); Regi = inRegis; }Sollte ich mit meinen Vermutungen recht haben, solltest du dir im Buch deiner Wahn nochmal die Themen Initialisierung/Zuweisung, Initialisierungsliste etc. genauer zu Gemüte führen.
-
Danke für den Tipp!!
Ich werds gleich ausprobieren.
-
Sorry, das ich mich noch nicht früher gemeldet habe...
Leider funktioniert es noch immer nicht, der selbe Fehler wie zu Anfang kein Compilerfehler und kein Bild ich versuch mal den Fehler einzugrenzen und dann nochmal Code zu posten...Edit: Doch einen Unterschied!
Wenigstens kommen wir bzw. ihr mit meinem Problem weiter. Ich krieg folgenden Fehler: Rückgabewert -1073741819
Mal den Debugger durchlaufen lassen...
Edit2: Segmentation fault, anscheinend ein Zeigerfehler, werde mal schauen ob ich ihn finde, wenn nicht dann würde ich mich nochmal melden...
-
ich versteh es nicht

Debugger: Startfenster::ini()+136, aber da initialisier ich doch nichts???void Startfenster::ini() { setWindowTitle("Felix"); connect(ui->Registration, SIGNAL(clicked()), this, SLOT(setUpR())); connect(ui->Nachname, SIGNAL(textEdited(QString)), Regi->ui->Nachname, SLOT(setText(QString))); }oder was hei*t das? Ich google zwar weiter, wuerde mich aber ueber Tipps wie bisher sehr freuen

-
Mir ist und bleibt der Debugger trotz dieser schoenen Seite ein Raetsel ich poste jetztmal was meiner Meinung relevant ist...
Edit: Fehler gefunden:#include <QtGui/QApplication> #include "startfenster.h" #include "registration.h" #include "check.h" class Registration *Regis; int main(int argc, char *argv[]) { QApplication app(argc, argv); Startfenster *Start = new Startfenster(Regis); Check *check = new Check(Regis); Registration *Regis = new Registration(Start, check); Start->ini(); //hier Regis->ini(); //und hier check->ini(); //und hier Start->show(); return app.exec(); }
-
es klappt nicht... Würdet ihr mir bitte nochmal helfen, warum der Zeiger diesmal wieder nicht richtig initialisiert und ich "Segmentation fault" erhalte?
Vielen Dank schonmal für die wirklich tolle Hilfe bis hierhin, auch wenn das im Vergleich zu dem was ich hier gelernt habe leider viel zu wenig ist

-
wit schrieb:
es klappt nicht... Würdet ihr mir bitte nochmal helfen, warum der Zeiger diesmal wieder nicht richtig initialisiert und ich "Segmentation fault" erhalte?
Wenn du uns nochmal den kompletten reduzierten Code zeigst. Ist etwas mühsam sich die einzelnen Codebrocken und alle Änderungen daran aus den letzten Seiten zusammenzukratzen

-
ok klar Moment...
ich nehme jetzt mal nur eine Klasse sieht ja alles gleich aus...Startfenster.h
class Startfenster : public QDialog { ... public: explicit Startfenster(Registration *inRegis, QWidget *parent = 0); ~Startfenster(); public: void ini(); ... private: Ui::Startfenster *ui; Registration *Regi; };Startfenster.cpp
... Startfenster::Startfenster(Registration *inRegis, QWidget *parent) : QDialog(parent), ui(new Ui::Startfenster), Regi(inRegis) { ui->setupUi(this); } ... void Startfenster::ini() //braucht man glaube ich zwar nicht, aber der Vollständigkeit halber... { setWindowTitle("Felix"); connect(ui->Registration, SIGNAL(clicked()), this, SLOT(setUpR())); connect(ui->Nachname, SIGNAL(textEdited(QString)), Regi->ui->Nachname, SLOT(setText(QString))); }main steht zwar oben drüber aber auf einen Blick ist vielleicht doch besser... und der Fehler ist bestimmt da, glaub ich *lol
... class Registration *Regis; int main(int argc, char *argv[]) { QApplication app(argc, argv); Startfenster *Start = new Startfenster(Regis); Check *check = new Check(Regis); Registration *Regis = new Registration(Start, check); Start->ini(); //wenn ich die drei Zeilen ausklammer funktionierts :confused: Regis->ini(); //2. check->ini(); //3. Start->show(); return app.exec(); }Greetings
-
komme einfach nicht weiter 3 Wochen mache ich jetzt rum mit dieser * Programmidee -.- Könnte nicht eventuell nochmal wer bitte schauen?
Edit: und ja ich habe mir die Initialisierungslistengeschichte durchgelesen
Es kann aber wieder durchaus sein das mein Talent zugeschlagen hat das Wichtigste zu überlesen... - da bin ich begabt!, muss man ja auch irgendwo sein 
-
pumuckl schrieb:
Wenn du uns nochmal den kompletten reduzierten Code zeigst. Ist etwas mühsam [...]
Und deinen Fehler beschreiben bzw. die Compilerfehlermeldung. Siehe Link in meiner Signatur.
-
ist eigentlich noch immer der Selbe, dache ich hätte... ach egal, ich hab heute einfach schlechten Tag
Fehler, kein Compilerfehler:
Absturzmeldung/Rückgabewert = -1073741819
Debuggermeldung = Segmentation fault
weitere Auffälligkeit: kein Fenster, wenn man aber die oben genannten Zeilen ausblendet bekomme ich einsAnbei ich habe mit dem Debugger versucht den Fehler zu finden ohne Erfolg, wie alles was ich versuche
Edit: Sehe gerade das ich beim ersten Post die IDE- und CompilerAngabe überlesen habe, typisch... QtCreator alles so gelassen wie´s war folglich MinGW-Compiler
achso und der Debugger geht unter Windows auch nicht da müsste ich glaube ich einen runterladen (geht aber eher schlecht bei einer Leitung von 380 KBit oder so. Bisher habe ich dann immer Linux genommen was ich mir die Woche geschrottet habedumme Frage: Geht es nur mir so oder ist programmieren am Anfang einfach zermürbend?
-
QT kenn ich garnicht, aber das sieht ungeschickt aus:
... Startfenster *Start = new Startfenster(Regis); Check *check = new Check(Regis); Registration *Regis = new Registration(Start, check); }Was hat Regis wohl für einen Wert, wenn das Startfenster alloziiert wird?
Und welchen, wenn der Check alloziiert wird?Auf jeden Fall bekommt Regis dann mal einen neuen Wert bei der Registration.
Meckert der Compiler bei der Reihenfolge nicht oder habe ich heute schon zuviel Code gesehen, dass ich was nicht blicke?
Ciao
MM
-
PS: Bin ja blöd, Du hast zwei Regis, einen globalen und einen lokalen. Warum?
-
ehm peinlich, war eigentlich als Art forward declaration gedacht (dachte mir warum soll das nur bei Klassen gehn, klar du hast vollkommen Recht!!), denn ich bekomme sonst folgenden Compilerfehler: 'Regis' was not declared in this scope
Edit: also genau das was du sagtest, aber wie löse ich es dann
-
wit schrieb:
also genau das was du sagtest, aber wie löse ich es dann
Indem du die Reihenfolge änderst und das zuerst definierst, was die anderen beiden brauchen?
Das sieht aus, als solltest du erstmal kleiner anfangen, ohne QT und Fensterkrempel, da scheinen die Basics noch nicht so ganz fest zu sitzen.
wit schrieb:
ist eigentlich noch immer der Selbe, dache ich hätte... ach egal, ich hab heute einfach schlechten Tag
Den letzten Code, den du davor gepostet hast, konnte man nicht übersetzen, weil in dem Fall haufenweise Deklarationen/Definitionen von Klassen, usw. fehlen. Wie schon gesagt, keiner hat Lust, sich durch 5 Seiten zu graben und sich die Einzelteile deines Codes zusammen zu suchen...
-
pumuckl schrieb:
wit schrieb:
also genau das was du sagtest, aber wie löse ich es dann
Indem du die Reihenfolge änderst und das zuerst definierst, was die anderen beiden brauchen?
ich bin zwar blöd, aber so blöd nun auch nicht
- nur geht das leider nicht da Registration die 2 anderen Klassen auch im Parameter hat oder andersrum, also wie dann?pumuckl schrieb:
Das sieht aus, als solltest du erstmal kleiner anfangen, ohne QT und Fensterkrempel, da scheinen die Basics noch nicht so ganz fest zu sitzen.
ja du hast Recht ... - Aber nur in der shell zu programmieren ist einem Teenager wie mir halt schnell zu langweilig...
Davon abgesehen kann mein Freund schon Webseiten mit HTML und so programmieren
und ich möchte nicht gar so blöd dastehen
Die Frage ist nur ob ich nicht gleich C++11 lernen bzw. anfangen sollte?pumuckl schrieb:
wit schrieb:
ist eigentlich noch immer der Selbe, dache ich hätte... ach egal, ich hab heute einfach schlechten Tag
Den letzten Code, den du davor gepostet hast, konnte man nicht übersetzen, weil in dem Fall haufenweise Deklarationen/Definitionen von Klassen, usw. fehlen. Wie schon gesagt, keiner hat Lust, sich durch 5 Seiten zu graben und sich die Einzelteile deines Codes zusammen zu suchen...
um gottes Willen das war nicht als Kritik gemeint, hab einfach schlechten Tag...
