Was wo includieren?

Alles rund um die Programmierung mit Qt
Antworten
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Was wo includieren?

Beitrag von joebar »

Hallo,

habe mit "geklautem" Source Code als Geruest angefangen, jetzt wollte ich mal die Includes aufraeumen. Mein altes Geruest sieht so aus:

testapp.h

Code: Alles auswählen

#ifndef TESTAPP_H
#define TESTAPP_H

#include "ui_testapp.h"

#include <QtGui>
#include <QtCore>

//Declarations here
#endif

testapp.cpp

Code: Alles auswählen

#include "testapp.h"

#include <QtGui>
#include <QtCore>

// und hier natuerlich dann noch ein wenig Coding

Ich nutze den Qt Designer fuer meine Forms. Ich weiss dass ich QtGui und QtCore durch die items ersetzen sollte die ich wirklich nutze, also z.B. ein <QFile> einbinden. Ich habe jetzt ein paar Fragen:

1. Kann es sein, dass der Designer (oder qmake) die includes fuer die Forms selbst mit einbindet. Ich komme ohne ein include von QLineEdit aus, daher meine Vermutung.

2. Im .cpp File includiere ich das .h File. Wenn ich nun im h File schon includes drin habe warum solte ich diese nochmal im cpp File aufnehmen?

3. Sollte ich includes ehr im .h File aufnehmen oder wenn sie im .h File nicht direkt gebraucht werden sollte ich sie nur im .cpp File aufnehmen?

4. Was muss ich fuer qDebug() includieren? Mein Programm funktioniert wenn ich entweder <QtGui> oder <QtCore> includiere. <QtGlobal> reicht nicht, ausserdem steht in der Doku nur "The <QtGlobal> header file provides basic declarations and is included by all other Qt headers." Hoert sich so an also ob man <QtGlobal> eigentlich nie includieren muss.
Die Fehlermeldung ist

callintegrator.cpp: In member function ?void CallIntegrator::process_line(QString)?:
/usr/include/QtCore/qglobal.h:1050: error: too few arguments to function ?void qDebug(const char*, ...)?
callintegrator.cpp:51: error: at this point in file
callintegrator.cpp:51: error: void value not ignored as it ought to be
/usr/include/QtCore/qglobal.h:1050: error: too few arguments to function ?void qDebug(const char*, ...)?
callintegrator.cpp:54: error: at this point in file
callintegrator.cpp:54: error: void value not ignored as it ought to be
/usr/include/QtCore/qglobal.h:1050: error: too few arguments to function ?void qDebug(const char*, ...)?
callintegrator.cpp:57: error: at this point in file
callintegrator.cpp:57: error: void value not ignored as it ought to be
callintegrator.cpp: In member function ?void CallIntegrator::slotSave()?:
/usr/include/QtCore/qglobal.h:1050: error: too few arguments to function ?void qDebug(const char*, ...)?
callintegrator.cpp:109: error: at this point in file
callintegrator.cpp:109: error: void value not ignored as it ought to be
make: *** [callintegrator.o] Error 1


Danke,
J.
central
Beiträge: 14
Registriert: 1. Juli 2005 02:00
Wohnort: Hamburg
Kontaktdaten:

Beitrag von central »

Guten Abend,


zu 1. ja.

zu 2. weß ich auch nicht, aber bestimmt jemand anderes.

zu 3. include da wo es gebraucht wird.

zu 4. schau dir mal dein Makefile an

zu deinen Fehlermeldungen

zu wenig Argumente für die Funtion

du versuchst einen wert in in einer void Funktion zurückzugeben.

wenn ich falsch liege möchte man mich bitte berichtigen :)
gruß

central
no trouble
no fun
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

2. Wer sagt, daß du das solltest? Falsch ist es nicht, Sinn macht es aber auch keinen...
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

2. Sagt keiner direkt, war nur so im "geklauten" Source File

3. also im cpp

4. Wenn ich <QtGui> einbinde klappt ja alles, es liegt nur am Header File der Sourcecode ist sonst ok. Wuerde nur gerne ein spezifischeren Header nehmen. Das Makefile ist das von qmake generierte, auf was soll ich da achten wenn ich rein schaue?

Danke,
J.
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

4. gut geraten ist halb gewonnen <QDebug> muss includiert werden. Warum verraet mir die Doku http://doc.trolltech.com/4.0/qtglobal.html das nicht?
heikob
Beiträge: 81
Registriert: 23. März 2005 23:20

Beitrag von heikob »

Hallo,

ich hänge mich mal an diesen Thread, auch wenn es nicht die feine englische Art ist.

Macht es Sinn, nur die benötigten Klassen einer lib zu includieren anstatt die komplette lib? Also beispielsweise explizit QDir anstatt gleich QtCore? Bringt das irgendwelche Vor- bzw. Nachteile?

heikob
Burgpflanze
Beiträge: 89
Registriert: 24. Februar 2006 16:41
Wohnort: Dresden

Beitrag von Burgpflanze »

Die Antwort darauf würde mich auch interessieren.
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Ich DENKE das exe File wird kleiner weil weniger included ist... aber das ist vielleicht etwas naiv gedacht und ist auf meinem eigenen Mist gewachsen.... wers besser weiss...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

heikob hat geschrieben: Macht es Sinn, nur die benötigten Klassen einer lib zu includieren anstatt die komplette lib? Also beispielsweise explizit QDir anstatt gleich QtCore? Bringt das irgendwelche Vor- bzw. Nachteile?
Die CompileZeitern werden ggf. schneller wenn der Compiler nicht so viel includieren muss (wobei z.B. ein doppeltes includieren einesHeaders nicht das Problem ist, aber includieren von unnötigen Headern). Ausserdem gibt's dann mehr dependencies der Sourcen & Header was make ggf. langsamer macht. Alles andere bleibt gleich - der Linker nutzt eh nur das,was er wirklich benötigt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Burgpflanze
Beiträge: 89
Registriert: 24. Februar 2006 16:41
Wohnort: Dresden

Beitrag von Burgpflanze »

Also doch lieber nur das includieren, was gebraucht wird.
Bei größeren Projekten kann man ja "precompiled headers" benutzen.
Antworten