Seite 1 von 1

c++ namespace

Verfasst: 26. Juli 2011 09:38
von Aenni
Hallo QT/c++ Experten,

folgende Frage hätte ich zu Namespaces in QT:
im example: "Screenshot" wird folgende headerdatei definiert:

Code: Alles auswählen

#ifndef SCREENSHOT_H
#define SCREENSHOT_H

#include <QPixmap>
#include <QWidget>

QT_BEGIN_NAMESPACE
class QCheckBox;
class QGridLayout;
class QGroupBox;
class QHBoxLayout;
class QLabel;
class QPushButton;
class QSpinBox;
class QVBoxLayout;
QT_END_NAMESPACE

//! [0]
class Screenshot : public QWidget
{
    Q_OBJECT
.....
    QPixmap originalPixmap;

    QLabel *screenshotLabel;
.....

Wenn ich QLabel nicht in den Namespace mit aufnehmen würde, kennt der Compiler natuerlich das QLabel weiter unten in dem headerfile nicht.
Meine Frage ist, wieso wird hier im Headerfile der namsepace definiert und im cpp file das komplette inc lude <QtGui> eingebunden (dies enthält doch alle QtGui spezifischen Klassen...)?
Der Sinn von Namespaces ist mir eigentlich klar, es ist wie bei der STL nicht eine grpsse headerdatei definiert sondern mehrere Header/klassefiles im selben namespace, daher muss ich nur das einbinden was ich brauche. Jedoch ist mir nicht klar, wieso im headerfile hier nicht <Qlabel> includiert wird, sondern über den namespace gegangen wird ?

Falls ich was falsch verstanden habe, bitte ich um Korrektur

Herzlichen Dank für eure Hilfe

Gruesse

Re: c++ namespace

Verfasst: 26. Juli 2011 11:18
von franzf
Header und Namensräume sind komplett verschiedene Sachen.
namespaces sind nur dazu da, Namenskonflikte zu verhindern.
header1.h definiert class Klasse
header2.h definiert class Klasse
-> Namenskonflikt!
Wenn die beiden Header (z.B. aus verschiedenen Bibliotheken) jetzt eindeutige Namensräume (=namespace) verwenden würden, gäbe es diesen Konflikt nicht mehr.

Nun kann man Qt auch mit namespaces kompilieren. Dazu gibt es eine configure-Option.
QT_BEGIN_NAMESPACE ist ein Macro und wird durch das passende "namespace XYZ {" ersetzt.
Google mal nach QT_BEGIN_NAMESPACE (solltest du sowieso vor einem Forums-Post machen), da gibt es viele schöne Erklärungen, was wann wie genau passiert.

Re: c++ namespace

Verfasst: 26. Juli 2011 11:41
von Aenni
hab einen Interessanten Post mit Antworten auf genau meine Fragen gefunden. Ich hoffe dieser Link geht in Ordnung:
http://www.qtcentre.org/threads/32170-Q ... E-question