Funktionsaufruf - Probleme

Du bist neu in der Welt von C++? Dann schau hier herein!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Dann musst du dir eben Erfahrung selber erarbeiten :P
Und am besten ordentliche C++-Bücher lesen.
Dann kämst du auf die Idee, bestimmte Buttons zu gruppieren in einem parent widget. Dann musst du nur das parent hide()en, und die children tun es auch. Wenn diese Buttons eine bestimmte bemeinsame Funktion haben (irgend was im SPiel kontrollieren), hast du einen Grund für ein eigenes QWidget-Derivat.

Ist dir jetzt wenigstens klar, was passiert ist? Speziell "was geschah mit SpielWIdget Bla"?
JeromeBaur
Beiträge: 22
Registriert: 12. Februar 2011 09:52

Beitrag von JeromeBaur »

also das mit der laufzeit hab ich schon geklärt. das hatt ich ja vorher anderst iwie muss das gelöscht worden sein von mir oder meinem kumpel. Ich hab bei createSpielWidget die button = new QPushBUtton wieder drinne und so aber das mit dem auf lebtwohl button klicken das dann das SpielWidget erstellt wird klappt nicht. sollte ja eigentlich gehen
Bei anderen funktion z.B auf inventar klicken und dann da auf spiel wird das SpielWidget auch erstellt. Nur in der questDatenbank.cpp gehts nicht(auch in anderen dateien nicht) und dies wär ja nun mein herkömmliches problem. also wenn wer die lösung weis wär ich nett wenn ich die erfahren dürft :roll: leider hab ich mein aufrufen der funktion nichts rausgefunden was falsch sein sollte vl habt ihr gemeint wegen den haufen bla = new QPushButton usw die gefehlt haben.

hoffe könnt mir helfen thx
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das sind ziemliche Grundlagen. Es gibt in C++ den automatischen und den dynamischen Speicherbereich (grob).
Beim dynamischen muss sich der Programmierer ums Anlegen und zerstören (vor allem letzteres) selber kümmern (new/delete).
Beim automatischen musst du dich NICHT drum kümmern. Verlässt ein Objekt den Gültigkeitsbereich, dann wars das!
Dein "Bla" ist so ein "automatisches Objekt". Verlässt es den Gültigkeitsbereich (hier Ende der FUnktion) geht das Hops, es wird zerstört.

Wenn dir nicht klar ist was ich mein, experimentier ein wenig rum.
Einfach ne Testklasse, die im Konstruktor und Destruktor eine Meldung ausgibt. Dann Machst du ein paar (verschachtelte) Scopes auf, legst objekte an, gibts debug-Meldungen aus, zerstörst - je nach deinem Gusto.
Diesen Spaß sollte jeder mal selber durchgezogen haben, dann versteht man auch besser was passiert.
JeromeBaur
Beiträge: 22
Registriert: 12. Februar 2011 09:52

Beitrag von JeromeBaur »

Nur damit ichs richtig versteh: Du meinst die Funktion?^^ hab nämlich ein

Code: Alles auswählen

SpielWidget Bla;
Bla.createSpielWidget();
desshalb bissel verwirrt :D

mfg
Zuletzt geändert von JeromeBaur am 18. März 2011 14:43, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Genau das mein ich.
JeromeBaur
Beiträge: 22
Registriert: 12. Februar 2011 09:52

Beitrag von JeromeBaur »

das is ja aber nicht die funktion sondern die stelle wo sie aufgerufen wird.

was soll ich da ändern? muss ich nich die funktion ändern?

sry ich kapies wohl echt net :roll:

vl könntest du mir n beispiel bringen an meinem projekt oder an einem beispiel? ich denke dann kann ichs ausprobieren :D
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Was soll ich denn noch groß Beispiele bringen?

Code: Alles auswählen

void QuestDatenbank::createSpielWidgetQuest()
{
  SpielWidget Bla;
  Bla.createSpielWidget();
} // hier ist Bla tot!

// bei einem Aufruf:
QuestDatenbank db;
db.createSpielWidget();
// ist hier schon von dem Bla aus obigem Funktionsaufruf nichts mehr übrig
Lösung? Sorg dafür dass Bla den Scope überlebt -> dynamische (="new" aka "Heap") statt automatische (aka "Stack") Speicherverwaltung. Incl. Vorsicht vor Speicherlecks (passende deletes zum new).

Wenn das immer noch nichts bringt solltest du wirklich den Schritt zurück in Richtung C++-Grundlagen machen. Klingt hart, ist aber so, sry :(
Antworten