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


  • Mod

    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.


Anmelden zum Antworten