c++ namespace

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

c++ namespace

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: c++ namespace

Beitrag 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.
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Re: c++ namespace

Beitrag 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
Antworten