Fehler beim Compilieren



  • Hallo,

    wenn ich versuche, unter Ubuntu ein Qt-Projekt zu compilieren erhalte ich nach der Eingabe des Befehls "make" folgende Fehlermeldung:

    g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
    main.cpp:1:24: Fehler: qapplication: No such file or directory
    main.cpp:2:23: Fehler: qpushbutton: No such file or directory
    main.cpp: In function »int main(int, char**)«:
    main.cpp:7: Fehler: »QApplication« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:7: Fehler: expected ;' before »a« main.cpp:9: Fehler: »QPushButton« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:9: Fehler: expected;' before »hello«
    main.cpp:10: Fehler: »hello« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:12: Fehler: »a« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp: At global scope:
    main.cpp:5: Warnung: unbenutzter Parameter »argc«
    main.cpp:5: Warnung: unbenutzter Parameter »argv«
    make: *** [main.o] Fehler 1

    Die Project-Datei und das Makefile wurden erfolgreich mit "qmake -project" bzw. "qmake" erstellt, also sollte der Compiler eigentlich wissen, welche Pakete er mit einbinden muss, und wo er diese findet.

    Danke für eure Hilfe!



  • Ist das dein Projekt?

    Ich hab zumindest mal keinen Header "qapplication", nur "qapplication.h".
    Vielleicht liegt es da dran.

    Sonst zeig mal etwas mehr Code bzw sag was das für ein Programm ist.



  • Das Projekt besteht nur aus folgender Datei:

    #include <qapplication.h>
    #include <qpushbutton.h>
    int main(int argc,char **argv)
    {
      QApplication app(argc,argv); // Dieses Objekt braucht man fuer jedes GUI-Programm.
    
      QPushButton *hello = new QPushButton("Hello I'm Qt!",0);  // Ein Knopf (noch ohne Funktion)
      hello->resize(100,30);        // Groesse von Hand bestimmen
      hello->show();                // Sichtbar-machen des Haupt-Widget
      app.setMainWidget(hello);     // Jedes GUI-Programm braucht ein Haupt-Widget
      return app.exec();            // Hier beginnt die Event-Schleife
    }
    

    Kopiert von

    http://www-alt.physik.uni-muenchen.de/kurs/Computing/ckursoo_05/node10.html

    Dies verursacht dann folgende Fehlermeldung:

    g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
    main.cpp:1:26: Fehler: qapplication.h: No such file or directory
    main.cpp:2:25: Fehler: qpushbutton.h: No such file or directory
    main.cpp: In function »int main(int, char**)«:
    main.cpp:5: Fehler: »QApplication« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:5: Fehler: expected ;' before »app« main.cpp:7: Fehler: »QPushButton« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: »hello« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: expected type-specifier before »QPushButton« main.cpp:7: Fehler: expected;' before »QPushButton«
    main.cpp:10: Fehler: »app« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp: At global scope:
    main.cpp:3: Warnung: unbenutzter Parameter »argc«
    main.cpp:3: Warnung: unbenutzter Parameter »argv«
    make: *** [main.o] Fehler 1



  • Wie man nur unschwer erkennen kann ist das für QT3.

    g++ -I /usr/qt/3/include/ -g -o main main.cpp -L /usr/qt/3/lib/ -lqt
    Funktioniert so bei mir.

    Und von was für einem Makefile hast du geredete?!

    http://doc.trolltech.com/4.5/tutorials.html



  • Ok, das war ein Qt3-Programm.

    Mit folgendem Qt4-Programm

    #include <QtGui>
    
    int main(int argc, char **argv)
    {
    	QApplication app(argc, argv);
    
    	QWidget *window = new QWidget;
    	window->setWindowTitle(„Qt4-Example“);
    
    	QLabel *label = new QLabel(„Hello World!“);
    	label->setAlignment(Qt::AlignCenter);
    
    	QPushButton *button = new QPushButton(„&Exit“);
    	QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()));
    
    	QVBoxLayout *layout = new QVBoxLayout;
    	layout->addWidget(label);
    	layout->addWidget(button);
    
    	window->setLayout(layout);
    	window->show();
    
    	return app.exec();
    }
    

    erhalte ich folgende Ausgabe (nach "qmake -project", "qmake" und "make":

    g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
    main.cpp:1:17: Fehler: QtGui: No such file or directory
    main.cpp:8:25: Warnung: fehlendes abschließendes Zeichen "
    main.cpp:8: Fehler: fehlendes abschließendes Zeichen "
    main.cpp:10:29: Warnung: fehlendes abschließendes Zeichen "
    main.cpp:10: Fehler: fehlendes abschließendes Zeichen "
    main.cpp:13:40: Warnung: fehlendes abschließendes Zeichen "
    main.cpp:13: Fehler: fehlendes abschließendes Zeichen "
    main.cpp: In function »int main(int, char**)«:
    main.cpp:5: Fehler: »QApplication« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:5: Fehler: expected ;' before »app« main.cpp:7: Fehler: »QWidget« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: »window« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: expected type-specifier before »QWidget« main.cpp:7: Fehler: expected;' before »QWidget«
    main.cpp:10: Fehler: »QLabel« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:10: Fehler: »label« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:10: Fehler: expected type-specifier before »QLabel«
    main.cpp:13: Fehler: »QPushButton« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:13: Fehler: »button« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp:13: Fehler: expected type-specifier before »QPushButton«
    main.cpp:13: Fehler: expected ;' before »QPushButton« main.cpp:16: Fehler: »QVBoxLayout« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:16: Fehler: »layout« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:16: Fehler: expected type-specifier before »QVBoxLayout« main.cpp:16: Fehler: expected;' before »QVBoxLayout«
    main.cpp:23: Fehler: »app« wurde in diesem Gültigkeitsbereich nicht definiert
    main.cpp: At global scope:
    main.cpp:3: Warnung: unbenutzter Parameter »argc«
    main.cpp:3: Warnung: unbenutzter Parameter »argv«
    make: *** [main.o] Fehler 1



  • Hast du denn die Datei "/usr/include/qt4/QtGui/QtGui"?
    Evtl fehlt ein bestimmtes (Entwickler-)Paket bei dir?

    Zudem sind deine Anführungszeichen kaputt.



  • Das Verzeichnis /usr/include/qt4 existiert nicht.

    Installiert sind folgende Pakete (Ausgabe bei Suche nach "qt"):
    libavahi-qt3-1
    libqt3-mt
    libqt4-dbus
    libqt4-desigener
    libqt4-network
    libqt4-opengl
    libqt4-qt3support
    libqt4-script
    libqt4-sql
    libqt4-sql-mysql
    libqt4-sql-sqlite
    libqt4-svg
    libqt4-webkit
    libqt4-xml
    libqtcore4
    libqtgui4
    qt4-dev-tools-dbg
    qt4-qmake



  • Dann fehlen dir die Entwicklerpakete. Such mal nach qt4 Paketen mit einem "dev" oder "devel" im namen. So wie libqt4-dev.

    Die werden halt nicht mitinstalliert, da man sie gewöhnlich nur braucht, wenn man etwas selber übersetzt, was aber für die meisten überflüssig ist, da alles bereits in Paketform vorliegt.



  • Danke für deine Hilfe und deinen geduldigen Umgang mit mir. 👍

    Das Paket "libqt4-dev" und alle davon abhängigen Pakete hatten noch gefehlt.
    (Und ich dachte, mit "qt4-dev-tools-dbg" hätte ich schon alles)

    Die kaputten Anführungszeichen kommen daher, dass ich den Quellcode aus Wikipedia kopiert hatte.

    Und jetzt geht's los mit Qt4 lernen... 🕶


Anmelden zum Antworten