hilfe bei compillierfehler



  • ich hantiere in bisschen mit qt herum um endlich gui für meine consolenanwendungen zu machen, aber mit iconbuttons scheint es nicht klappen zu wollen... irgenwo muss ich glaube ich die *h datein "kicondialog.h" deklarieren, nur wo wie bekomm ich den fehler weg???? 😞

    thx im voraus 👍

    c******@linux:~/Desktop/DSL> make
    qmake -o Makefile keagle.pro
    /usr/lib/qt3/bin/uic form1.ui -o .ui/form1.h
    g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -Wall -W -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall  -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include -I/usr/lib/qt3/include -I.ui/ -I. -I.moc/ -o .obj/main.o main.cpp
    /usr/lib/qt3/bin/uic form1.ui -i form1.h -o .ui/form1.cpp
    g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -Wall -W -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall  -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include -I/usr/lib/qt3/include -I.ui/ -I. -I.moc/ -o .obj/form1.o .ui/form1.cpp
    .ui/form1.cpp:13:25: kicondialog.h: Datei oder Verzeichnis nicht gefunden
    .ui/form1.cpp: In constructor `Form1::Form1(QWidget*, const char*, bool, unsigned int)':
    .ui/form1.cpp:37: error: invalid use of undefined type `struct KIconButton'
    .ui/form1.h:20: error: forward declaration of `struct KIconButton'
    .ui/form1.cpp:38: error: `setGeometry' undeclared (first use this function)
    .ui/form1.cpp:38: error: (Each undeclared identifier is reported only once for each function it appears in.)
    .ui/form1.cpp:48: error: invalid use of undefined type `struct KIconButton'
    .ui/form1.h:20: error: forward declaration of `struct KIconButton'
    .ui/form1.cpp:51: error: invalid use of undefined type `struct KIconButton'
    .ui/form1.h:20: error: forward declaration of `struct KIconButton'
    .ui/form1.cpp:57: error: invalid use of undefined type `struct KIconButton'
    .ui/form1.h:20: error: forward declaration of `struct KIconButton'
    .ui/form1.cpp:68: error: no matching function for call to `Form1::connect(KIconButton*&, const char[11], Form1* const, const char[9])'
    /usr/lib/qt3/include/qobject.h:116: error: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*)
    /usr/lib/qt3/include/qobject.h:227: error:                 bool QObject::connect(const QObject*, const char*, const char*) const
    .ui/form1.cpp:69: error: no matching function for call to `Form1::connect(KIconButton*&, const char[11], Form1* const, const char[9])'
    /usr/lib/qt3/include/qobject.h:116: error: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*)
    /usr/lib/qt3/include/qobject.h:227: error:                 bool QObject::connect(const QObject*, const char*, const char*) const
    .ui/form1.cpp:70: error: no matching function for call to `Form1::connect(KIconButton*&, const char[11], Form1* const, const char[9])'
    


  • Du musst das Verzeichnis mit den Headerdateien, die benötigt werden, in die .pro Datei einfügen. Du musst halt suchen, wo die kicondialog.h auf deinem System liegt.



  • seit wann muss man denn nach dem verzeichnis für header-dateien suchen wenn man icon buttens will?? 😮



  • so hab nun die ganzen .hs in mein projectverzeichnis kopiert und nun das.... 😞

    g++  -o keagle .obj/main.o .obj/form1.o .obj/moc_form1.o   -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -lqt -lXext -lX11 -lm
    .obj/form1.o(.text+0x4bb): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0x613): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0x673): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0x769): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0xa5b): In function `Form1::Form1[not-in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0xbb3): more undefined references to `KIconButton::KIconButton[in-charge](QWidget*, char const*)' follow
    collect2: ld returned 1 exit status
    make: *** [keagle] Fehler 1
    


  • n_qt schrieb:

    so hab nun die ganzen .hs in mein projectverzeichnis kopiert und nun das.... 😞

    g++  -o keagle .obj/main.o .obj/form1.o .obj/moc_form1.o   -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -lqt -lXext -lX11 -lm
    .obj/form1.o(.text+0x4bb): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0x613): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0x673): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0x769): In function `Form1::Form1[in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0xa5b): In function `Form1::Form1[not-in-charge](QWidget*, char const*, bool, unsigned)':
    : undefined reference to `KIconButton::KIconButton[in-charge](QWidget*, char const*)'
    .obj/form1.o(.text+0xbb3): more undefined references to `KIconButton::KIconButton[in-charge](QWidget*, char const*)' follow
    collect2: ld returned 1 exit status
    make: *** [keagle] Fehler 1
    

    Das Reinkopieren war nicht das Beste, was du machen konntest. Ich schrieb, dass du das Verzeichnis mit den Headern einbinden solltest und nicht dessen Inhalt kopieren.

    Nach deinem ersten Post zu urteilen arbeitest du mit qmake und hast eine keagle.pro Datei. In dieser Datei kannst du mit der Variable INCLUDEPATH angeben, wo nach Headerdateien gesucht werden soll. Mit der Variable LIBS gibst du an, wo nach Libs gesucht werden soll und welche dazugelinkt werden sollen. KIconButton ist soweit ich weiss Teil von libkio. Deshalb musst du nach libkio suchen und dann das Verzeichnis zusammen mit der Library in der .pro Datei eintragen. Das könnte so aussehen:

    LIBS += -L/pfad/zur/libkio/lib -lkio

    Hast du eigentlich schon die beiden Qt Tutorials, das Designer Tutorial und das Qmake Tutorial durchgearbeitet?



  • nein, ich wollte mich ein bissel so damit vertraut machen.. ich dachte nicht das bei vorhandensein von schönen icon buttons an der seite des designers noch noch irgenwelche header probleme existieren.

    bei mir liegen die includes in /opt/kde3/include aber kein kio, mysteriös 🕶
    hab suse 9.2... auch eine suche hat kein kio festgestellt. Was macht das eigentlich???

    ps woher weißt du das es an kio liegt



  • n_qt schrieb:

    nein, ich wollte mich ein bissel so damit vertraut machen.. ich dachte nicht das bei vorhandensein von schönen icon buttons an der seite des designers noch noch irgenwelche header probleme existieren.

    bei mir liegen die includes in /opt/kde3/include aber kein kio, mysteriös 🕶
    hab suse 9.2... auch eine suche hat kein kio festgestellt. Was macht das eigentlich???

    ps woher weißt du das es an kio liegt

    Ich weiss es nicht, ich hab nur im Internet nach der Klasse gesucht und die Doku sprach von libkio. Die wirst du auch nicht in /opt/kde3/include finden sondern in /opt/kde3/lib. Das erste verwendest du bei der INCLUDEPATH Direktive und das zweite bei LIBS



  • also kompillieren funktioniert jetzt einwandfrei, DANKE, doch jetzt wirds peinlich....

    für alle die noch die pro datei sehen wollen....

    TEMPLATE	= app
    LANGUAGE	= C++
    
    CONFIG	+= qt warn_on release
    
    LIBS	+= -L/opt/kde3/lib/ -lkio
    
    INCLUDEPATH	+= /opt/kde3/include
    
    SOURCES	+= main.cpp
    
    FORMS	= form1.ui
    
    unix {
      UI_DIR = .ui
      MOC_DIR = .moc
      OBJECTS_DIR = .obj
    }
    

    leider erzeut make keine funktionierende datei, obwohl ich noch nichts gemacht habe außer buttons anordnen... meine ui datei die xxxui.h ist praktisch leer, und main.cpp ist auch noch leer. ich bekomme ein segmentation fault, oder speicherzugriffsfehler, wenn ich per shell öffne, interessant.

    main.cpp

    #include <qapplication.h>
    #include "form1.h"
    
    int main( int argc, char ** argv )
    {
        QApplication a( argc, argv );
        Form1 w;
        w.show();
        a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
        return a.exec();
    }
    

    form1.ui

    <!DOCTYPE UI><UI version="3.3" stdsetdef="1">
    <class>Form1</class>
    <widget class="QDialog">
        <property name="name">
            <cstring>Form1</cstring>
        </property>
        <property name="geometry">
            <rect>
                <x>0</x>
                <y>0</y>
                <width>231</width>
                <height>270</height>
            </rect>
        </property>
        <property name="caption">
            <string>KEagle</string>
        </property>
        <widget class="KIconButton">
            <property name="name">
                <cstring>kIconButton_exit</cstring>
            </property>
            <property name="geometry">
                <rect>
                    <x>120</x>
                    <y>210</y>
                    <width>100</width>
                    <height>50</height>
                </rect>
            </property>
            <property name="text">
                <string>&amp;EXIT</string>
            </property>
            <property name="accel">
                <string>Alt+E</string>
            </property>
        </widget>
        <widget class="QTabWidget">
            <property name="name">
                <cstring>tabWidget2</cstring>
            </property>
            <property name="geometry">
                <rect>
                    <x>10</x>
                    <y>10</y>
                    <width>210</width>
                    <height>200</height>
                </rect>
            </property>
            <widget class="QWidget">
                <property name="name">
                    <cstring>tab</cstring>
                </property>
                <attribute name="title">
                    <string>Tab 1</string>
                </attribute>
                <widget class="QButtonGroup">
                    <property name="name">
                        <cstring>buttonGroup2</cstring>
                    </property>
                    <property name="geometry">
                        <rect>
                            <x>10</x>
                            <y>0</y>
                            <width>180</width>
                            <height>110</height>
                        </rect>
                    </property>
                    <property name="title">
                        <string>buttonGroup2</string>
                    </property>
                    <widget class="KIconButton">
                        <property name="name">
                            <cstring>kIconButton_unplug</cstring>
                        </property>
                        <property name="geometry">
                            <rect>
                                <x>10</x>
                                <y>70</y>
                                <width>150</width>
                                <height>31</height>
                            </rect>
                        </property>
                        <property name="text">
                            <string>Trenne Verb.</string>
                        </property>
                    </widget>
                    <widget class="KIconButton">
                        <property name="name">
                            <cstring>kIconButton_connect</cstring>
                        </property>
                        <property name="geometry">
                            <rect>
                                <x>10</x>
                                <y>30</y>
                                <width>150</width>
                                <height>31</height>
                            </rect>
                        </property>
                        <property name="text">
                            <string>Verbinde</string>
                        </property>
                    </widget>
                </widget>
            </widget>
            <widget class="QWidget">
                <property name="name">
                    <cstring>tab</cstring>
                </property>
                <attribute name="title">
                    <string>Tab 2</string>
                </attribute>
                <widget class="QGroupBox">
                    <property name="name">
                        <cstring>groupBox1</cstring>
                    </property>
                    <property name="geometry">
                        <rect>
                            <x>10</x>
                            <y>0</y>
                            <width>180</width>
                            <height>110</height>
                        </rect>
                    </property>
                    <property name="title">
                        <string>groupBox1</string>
                    </property>
                </widget>
                <widget class="KIconButton">
                    <property name="name">
                        <cstring>kIconButton_refresh</cstring>
                    </property>
                    <property name="geometry">
                        <rect>
                            <x>10</x>
                            <y>110</y>
                            <width>180</width>
                            <height>21</height>
                        </rect>
                    </property>
                    <property name="text">
                        <string>erneuern</string>
                    </property>
                </widget>
            </widget>
        </widget>
    </widget>
    <includes>
        <include location="local" impldecl="in implementation">form1.ui.h</include>
    </includes>
    <pixmapinproject/>
    <layoutdefaults spacing="6" margin="11"/>
    <includehints>
        <includehint>kicondialog.h</includehint>
        <includehint>kicondialog.h</includehint>
        <includehint>kicondialog.h</includehint>
        <includehint>kicondialog.h</includehint>
    </includehints>
    </UI>
    


  • KIconButton kann man nur innerhalb einer KDE Anwendung benutzen. Deshalb musst du daraus eine solche machen:

    #include <kapplication.h>
    #include <kcmdlineargs.h>
    
    #include "form1.h"
    
    int main( int argc, char ** argv )
    {
       KCmdLineArgs::init(argc, argv, "keagle", "keagle", "0.1");
       KApplication a;
       Form1 w;
       a.setMainWidget(&w);
       w.show();
       a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
       return a.exec();
    }
    


  • danke! 😮


Anmelden zum Antworten