was ist in meinem code falsch!! meine klasse wird nicht erkannt!!!
-
hallo allerseits
mein problem ist folgendes. ich habe in zwei klassen, welche von qwidget abgeleitet sind.
in klasse 1 befindet sich ein textedit. wie kann ich denn auf die eigenschaften des textedits von klasse 2 heraus reagieren.
ich habe die klasse1.h in der klasse2.h included.
hier noch etwas code
ich hab nun klasse 1 wo mein edit(qtextedit) erzeugt wird.
klasse1.cpp
#include <QTextEdit> #include "klasse1.h" Klasse1::Klasse1(QWidget *parent) : QWidget(parent) { edit = new QTextEdit(this); edit->setGeometry(10,10,400,300); }
die klasse1.h dazu sieht dann so aus
#ifndef KLASSE1_H #define KLASSE1_H #include <QTextEdit> class Klasse1: public QWidget { Q_OBJECT public: Klasse1(QWidget *parent = 0); QTextEdit *edit; public slots: private: }; #endif
so die klasse2.cpp wäre dann diese
#include <QTextEdit> #include "klasse2.h" Klasse2::Klasse2(QWidget *parent, Klasse1 *kl1) : QWidget(parent) { kl1->edit()->setPointFontSize(9); }
und die dazugehörige header klasse2.h wäre die
Code:#ifndef KLASSE2_H #define KLASSE2_H #include <QTextEdit> #include "klasse1.h" class KLASSE2: public QWidget { Q_OBJECT public: Klasse1(QWidget *parent = 0, Klasse1 *kl1); QTextEdit *edit; public slots: private: }; #endif
da bekomme ich natürlich ein fehler, weil edit in klasse 2 nicht deklariert ist.
danke
-
Also ohne die () hinter edit müsste es funktionieren.
Allerdings sind Publicvariablen wirklich schlechtes Design, und ein no go.
Ergo solltest du vielleicht da andere Wege gehen, und dich evtl. fragen ob Klasse2 wirklich
auf dinge von Klasse1 zugreifen muss.
-
danke für deine antwort!
leider hat das klammer weglassen auch nix gebracht.
mein compiler sagt mir folgendes:C:\Qt\4.2.3\project\sourceedit>make mingw32-make -f Makefile.Release mingw32-make[1]: Entering directory `C:/Qt/4.2.3/project/sourceedit' g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_D LL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/in clude/QtGui" -I"C:/Qt/4.2.3/include/QtGui" -I"C:/Qt/4.2.3/include" -I"." -I"C:/Q t/4.2.3/include/ActiveQt" -I"tmp\moc\release_shared" -I"." -I"..\..\mkspecs\win3 2-g++" -o tmp\obj\release_shared\main.o main.cpp In file included from sourceedit.h:13, from main.cpp:4: klasse2.h: error: `MyWidget' has not been declared klasse2.h: error: ISO C++ forbids declaration of `kl1' with no type klasse2.h: error: ISO C++ forbids declaration of `klasse1' with no type klasse2.h: error: expected `;' before '*' token mingw32-make[1]: *** [tmp\obj\release_shared\main.o] Error 1 mingw32-make[1]: Leaving directory `C:/Qt/4.2.3/project/sourceedit' mingw32-make: *** [release] Error 2
evtl kannst du damit was anfangen...
danke
-
In klasse2.h ist am Ende des Konstruktors eine Klammer zu viel.
-
ups... die ist mir beim schreiben hier mit dazwischen gerutscht..
bekomme allerdings nach wie vor die selbe meldung...
ich hab jetzt mal die klasse1.h in der klasse2.cpp included.
da kann ich mit
Klasse1 *testklasse = new Klasse1()
eine neue erstellen. die wird auch fehlerfrei erkannt und ich kann auch auf objekte in klasse 1 zugreifen.
zB
testklasse->edit->setText("test");
das problem ist, das klasse 1 ja schon beim starten des programms erstellt wird.
somit verursacht windows einen fehler und das programm wird geschlossen.kann ich eigentlich noch anders auf die klasse zugreifen, ohne sie neu zu erstellen??
danke
PS: klasse 2 soll ein einstellungsmenü für den editor werden. deswegen sind 2 fenster nötig.