Hi lori,
also ganz langsam:
Du hast in MyClass Deinen Slot runslot(). In diesem Slot möchtest Du die Variable "liste" ansprechen. Diese hast Du jedoch in Deiner main.cpp deklariert. Das ist der Grund weshalb runslot() diese Variable nicht nutzen kann, weil runslot() die Variable "liste" überhaupt nicht kennt.
Was Du nun versucht hast:
Du hast in MyClass mittels QListBox *liste; die Variable definiert. Jetzt versuchst Du die liste in main.cpp anzusprechen. Aber jetzt kennt main ja gar nicht mehr die Variable "liste", weil Du sie nur in MyClass definiert hast.
Das sind komplett verschiedene Gültigkeitsbereiche. Du kannst das nun folgendermaßen lösen:
Für den Fall, dass Du die Liste nur in MyClass benötigst gehst Du so vor:
Du deklarierst liste in MyClass, wie Du es schon gemacht hast. Jetzt musst Du aber liste noch belegen. Weil mit QListBox *liste hast Du lediglich einen Pointer auf ein Objekt QListBox erstellt. Im Konstruktor von MyClass kannst Du jetzt mit:
liste = new QListBox(win, "test");
die Variable liste auf ein neues Objekt vom Typ QListBox zeigen lassen. (Vorausgesetzt die Klasse MyClass kennt "win")
Falls Du die Liste auch außerhalb von MyClass benötigst musst Du die liste explizit von außen setzen. D.h.:
Du könntest entweder die Variable liste als public definieren und direkt darauf zugreifen, was aber unschön ist. Das sehe dann so aus:
public:
QListBox *liste;
Dann kannst Du von außerhalb auf liste zugreifen, mittels:
MyClass test;
test.liste = new QListBox(win, "test");
Oder eben:
MyClass *test = new MyClass();
test -> liste = new QListBox(win, "test");
Allerdings ist das direkte Zugreifen auf Variablen keine schöne Sache. Du könntest z.B. die Liste beim Konstruktor übergeben. D.h. Du schreibst einen Konstruktor für MyClass:
MyClass::MyClass(QListBox *myListBox) {
liste = myListBox;
}
(liste muss natürlich in MyClass vorhanden sein, wie Du es bereits gemacht hast)
Main sollte dann in etwa so aussehen:
QListBox *liste = new QListBox(win, "test");
MyClass *neuesObject = new MyClass(liste);
Jetzt kannst Du in runslot() auf die liste zugreifen.
Ich hoffe es hilft. Ich empfehle Dir außerdem, Dir mal ein C++ - Buch zuzulegen. Solche Dinge (Pointer, Gültigkeitsbereiche usw.) sind elementare C++ - Grundlagen und werden in fast jedem C++ - Buch ziemlich genau erklärt. Wenn Du das ganze nämlich verstanden hast, macht C++ programmieren gleich doppelt soviel Spaß, weil Du dann weißt, was Du da machst
Gruß
Mike