linuxspezifischer fehler?!



  • an sich ist diese meldung ja mehr als eindeutig, das problem ist das diese variable öffentlich deklariert ist und nur in/ unter linux probleme macht! ich weiß leider nicht warum, und bisher konnte mir niemand helfen. ich benutze den qtdesigner habe dieses objekt als öffentliche klassenvariable deklariert.

    void eagle_gui::time_out() 
     {     
       lCDNumber_time_remaining->display( --lcdvalue );
       if(lcdvalue == 0) {
         QMessageBox::information( this, "Timer", "timeout." );
         timer.stop();
       }
    }
    

    dieser simple code funktioniert wunderbar in windows, allerdings nicht in linux, und ich habe schon zwei distris ausprobiert?
    ich weiß wirklich nicht weiter.
    ps: woher kommt es eigenlich das gcc immer so riesige executables macht... da scheint es bessere compiler zu geben!

    [root@host kEagle]# make
    qmake -o Makefile keagle.pro
    /usr/lib/qt-3.3/bin/uic form1.ui -o .ui/form1.h
    g++ -c -pipe -Wall -W -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -m32 -march=i386 -mtune=pentium4  -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt-3.3/mkspecs/default -I. -I/usr/include/kde -I/usr/lib/qt-3.3/include -I.ui/ -I. -I.moc/ -o .obj/main.o main.cpp
    main.cpp: In function ‘int main(int, char**)’:
    main.cpp:19: warning: ‘init’ is deprecated (declared at /usr/include/kde/kcmdlineargs.h:260)
    /usr/lib/qt-3.3/bin/uic form1.ui -i form1.h -o .ui/form1.cpp
    g++ -c -pipe -Wall -W -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -m32 -march=i386 -mtune=pentium4  -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt-3.3/mkspecs/default -I. -I/usr/include/kde -I/usr/lib/qt-3.3/include -I.ui/ -I. -I.moc/ -o .obj/form1.o .ui/form1.cpp
    .ui/form1.h:65: error: field ‘timer’ has incomplete type
    /usr/lib/qt-3.3/include/qtooltip.h:86: warning: ‘class QToolTip’ has virtual functions but non-virtual destructor
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::startadsl()’:
    .ui/../form1.ui.h:32: warning: unused variable ‘ok_plug’
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::stopadsl()’:
    .ui/../form1.ui.h:41: warning: unused variable ‘ok_unplug’
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::startTimer()’:
    .ui/../form1.ui.h:86: error: ‘timer’ was not declared in this scope
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::time_out()’:
    .ui/../form1.ui.h:94: error: ‘timer’ was not declared in this scope
    make: *** [.obj/form1.o] Error 1
    


  • dgrat schrieb:

    g++ -c -pipe -Wall -W -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -m32 -march=i386 -mtune=pentium4 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt-3.3/mkspecs/default -I. -I/usr/include/kde -I/usr/lib/qt-3.3/include -I.ui/ -I. -I.moc/ -o .obj/main.o main.cpp
    main.cpp: In function ‘int main(int, char**)’:
    main.cpp:19: warning: ‘init’ is deprecated (declared at /usr/include/kde/kcmdlineargs.h:260)
    /usr/lib/qt-3.3/bin/uic form1.ui -i form1.h -o .ui/form1.cpp
    g++ -c -pipe -Wall -W -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -m32 -march=i386 -mtune=pentium4 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt-3.3/mkspecs/default -I. -I/usr/include/kde -I/usr/lib/qt-3.3/include -I.ui/ -I. -I.moc/ -o .obj/form1.o .ui/form1.cpp
    .ui/form1.h:65: error: field ‘timer’ has incomplete type
    /usr/lib/qt-3.3/include/qtooltip.h:86: warning: ‘class QToolTip’ has virtual functions but non-virtual destructor
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::startadsl()’:
    .ui/../form1.ui.h:32: warning: unused variable ‘ok_plug’
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::stopadsl()’:
    .ui/../form1.ui.h:41: warning: unused variable ‘ok_unplug’
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::startTimer()’:
    .ui/../form1.ui.h:86: error: ‘timer’ was not declared in this scope
    .ui/../form1.ui.h: In member function ‘virtual void eagle_gui::time_out()’:
    .ui/../form1.ui.h:94: error: ‘timer’ was not declared in this scope
    make: *** [.obj/form1.o] Error 1[/code]

    Erstens denke ich, dass -mtune und -march dasselbe sind.
    "-march=cpu-type
    Generate instructions for the machine type cpu-type. The choices for cpu-type are the same as for -mtune. Moreover, specifying -march=cpu-type implies -mtune=cpu-type."
    Zweitens ist deine Konsole nicht richtig eingestellt.
    Drittens frage ich mich, wieso du die Variable public machst.
    Viertens würde ich erst die Fehler (error) beseitigen und dann mit -Wall und konsorten zuschlagen.
    Fünftens plädiere ich dafür, dass du auch noch die Header-File postest, weil ich den Fehler nicht beheben kann, wenn ich die Deklaration nicht sehe.

    mfg



  • dgrat schrieb:

    an sich ist diese meldung ja mehr als eindeutig, das problem ist das diese variable öffentlich deklariert ist und nur in/ unter linux probleme macht! ich weiß leider nicht warum, und bisher konnte mir niemand helfen. ich benutze den qtdesigner habe dieses objekt als öffentliche klassenvariable deklariert.

    "main.cpp: In function ‘int main(int, char**)’:"
    Sagt mir wenigstens, daß da irgendein Zeug am Zeilenanfang und -ende rumklebt, daß da nicht hingehört. Also im wesentlichen mal das '\r' rausklauen. tr -d '^M' oder so machen.

    ps: woher kommt es eigenlich das gcc immer so riesige executables macht...

    Warum nimmst Du nicht die Debuggingsymbole raus? strip & Co?

    [root@host kEagle]# make

    Um ein Mißverständnis auszuräumen: weder für make, noch für make install braucht man Rootrechte. Es ist sogar ziemlich fahrlässig, das mit Fremdsoftware zu machen. make macht man als gewöhnlicher User, für make install legt man sich einen teilpriviligierten Install-User an.



  • zu daniel
    es kann dir eigentlich egal sein für welchem zweck(und vielmehr aus welchen zugriffsrechten) ich den code kompilliere.
    meine frage, warum diese verdammte variable nicht erkann wird, bleibt allerdings weiter auf der strecke.

    ich habe auch schon überlegt irgenwelche klassen zu posten, diese sind allerdings aus dem Qt-toolkit und funktionieren.
    ebenso funzt auch alles in windows. nur unter linux findet er die im designer angelegte variable nicht.



  • Diese komischen Zeichen da machen mich auch stutzig. Es könnte sein, dass deine Konsole wirklich einfach nur nicht richtig eingestellt ist, aber möglicherweise ist es auch tatsächlich so, dass da irgendwelche komischen DOS-Zeichen drin sind. Unix und DOS haben verschiedene Darstellungen für bestimmte Charaktere (z.B. newline), da kann sowas schonmal passieren, wenn man eine Datei unter Windows geschrieben hat und dann unter Linux öffnest (typischerweise sieht man z.B. in emacs dann so ^M Zeichen an den Zeilenenden).

    Es gibt Programme, die Dateien für Unix und DOS hin- und herformatieren können. Hier ist z.B. ein solches Programm online:
    http://www.iconv.com/dos2unix.htm
    Versuch das vielleicht mal auf die betroffene Datei laufen zu lassen, dann nochmal kompilieren 🙂



  • dgrat schrieb:

    es kann dir eigentlich egal sein für welchem zweck(und vielmehr aus welchen zugriffsrechten) ich den code kompilliere.
    meine frage, warum diese verdammte variable nicht erkann wird, bleibt allerdings weiter auf der strecke.

    Sei bitte ein bisschen freundlicher; niemand hier ist an _Deinen_ Fehlern schuld.
    Wenn Dir jemand Tipps zu anderen Themen gibt, dann werte das einfach als zusätzliche Serviceleistung, durch die man oft eine Menge lernen kann.



  • Hast du vielleicht ein Headerfile, das du mit falscher Groß-/Kleinschreibung inkludierst?



  • das war garnicht "so" böse gemeint, im diesem zusammenhang macht mich dieser fehler schon seit langem verrückt und ich kann ihn nicht finden!!!
    ich werde erstmal "einheitlix" rat ausprobieren. im übrigen schonmal danke.



  • egal, kann ich jemanden vielleicht die 3 dateien senden? ich muss einfach wissen wo der fehler ist! in meinem dorfchen gibts nunmal niemanden und meine schule wird von komplett unfähigen geleitet 😞

    qmake -o Makefile keagle.pro
    /usr/lib/qt-3.3/bin/uic form1.ui -i form1.h -o .ui/form1.cpp
    g++ -c -pipe -Wall -W -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -m32 -march=i386 -mtune=pentium4  -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt-3.3/mkspecs/default -I. -I/usr/include/kde -I/usr/lib/qt-3.3/include -I.ui/ -I. -I.moc/ -o .obj/form1.o .ui/form1.cpp
    In file included from .ui/form1.cpp:30:
    .ui/../form1.ui.h:96:2: warning: no newline at end of file
    .ui/form1.h:65: Fehler: field »timer« has incomplete type
    /usr/lib/qt-3.3/include/qtooltip.h:86: Warnung: »class QToolTip« has virtual functions but non-virtual destructor
    .ui/../form1.ui.h: In member function »virtual void eagle_gui::startadsl()«:
    .ui/../form1.ui.h:32: Warnung: Variable »ok_plug« wird nicht verwendet
    .ui/../form1.ui.h: In member function »virtual void eagle_gui::stopadsl()«:
    .ui/../form1.ui.h:41: Warnung: Variable »ok_unplug« wird nicht verwendet
    .ui/../form1.ui.h: In member function »virtual void eagle_gui::startTimer()«:
    .ui/../form1.ui.h:86: Fehler: »timer« was not declared in this scope
    .ui/../form1.ui.h: In member function »virtual void eagle_gui::time_out()«:
    .ui/../form1.ui.h:94: Fehler: »timer« was not declared in this scope
    make: *** [.obj/form1.o] Fehler 1
    


  • mail me: slash-ex@web.de



  • Poste mal die Header von eagle_gui.

    Wenn du jemanden den Code geben willst dann lade ihn auf einem Webspace hoch. Vile geben hier ihre Emailadresse aus gutem Grund nicht her.



  • //form1.ui.h
    
    #include <qprocess.h>
    #include <qwidget.h>
    #include <kpixmap.h>
    #include <qmessagebox.h>
    #include <kcolordialog.h>
    #include <qtimer.h>
    #include <qdatetimeedit.h>
    #include <qlcdnumber.h>
    #include "stats.h"
    #include<iostream>
    #include <qtimer.h>
    ...
     void eagle_gui::startTimer()
    {
       timer.start(100, false); //error
    }
    
     void eagle_gui::time_out() 
     {     
       lCDNumber_time_remaining->display( --lcdvalue );
       if(lcdvalue == 0) {
         QMessageBox::information( this, "Timer", "Zeit ist abgelaufe, Verbindung wird getrennt." );
         timer.stop; //error
       }
    }
    
    .ui/form1.h:65: Fehler: Feld »timer« hat unvollständigen Typen
    

    because of this i added... 👎
    na ich hoffe das hilft, obwohl ich es nicht glaub

    //form1.h
    
    #include <qvariant.h>
    #include <qdialog.h>
    #include <qtimer.h> //this
    
    class QVBoxLayout;
    class QHBoxLayout;
    class QGridLayout;
    class QSpacerItem;
    class QPushButton;
    class QGroupBox;
    class QLabel;
    class QLineEdit;
    class QSpinBox;
    class QSlider;
    class QLCDNumber;
    class QTabWidget;
    class QWidget;
    class QButtonGroup;
    class KLed;
    
    class eagle_gui : public QDialog
    {
        Q_OBJECT
    
    public:
        eagle_gui( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
        ~eagle_gui();
    
        QPushButton* pushButton_end;
        QGroupBox* groupBox_second;
        QLabel* textLabel_uPass;
        QLabel* textLabel_uName;
        QLineEdit* keyedit;
        QLineEdit* useredit;
        QPushButton* pushButton_more;
        QPushButton* pushButton_time;
        QGroupBox* groupBox_first;
        QSpinBox* spinBox1;
        QPushButton* pushButton_resetTime;
        QSlider* slider_timeadj;
        QLCDNumber* lCDNumber_time_remaining;
        QPushButton* pushButton_setTime;
        QTabWidget* tabWidget_prime;
        QWidget* tab;
        QButtonGroup* buttonGroup2;
        QPushButton* pushButton_disconnect;
        QPushButton* pushButton_connect;
        QWidget* tab_2;
        QGroupBox* groupBox_status;
        KLed* adsl_stat;
        QLabel* textLabel_op;
        QLabel* textLabel_unop;
    
        QTimer timer;
    
        virtual int getTime();
    
    public slots:
        virtual void startadsl();
        virtual void stopadsl();
        virtual void SetLedStat();
        virtual void initGroupBox();
        virtual void setUserEdit();
        virtual void setzeZeit( int x );
        virtual void startTimer();
        virtual void time_out();
    
    protected:
        QGridLayout* groupBox_secondLayout;
    
    protected slots:
        virtual void languageChange();
    
    private:
        double lcdvalue;
    
    };
    

Anmelden zum Antworten