<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Namensräume werden anders gehandhabt als in standart C++?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wunder mich gerade warum folgendes mit Qt gültig ist(was steht weiter unten). Es handelt sich Quelldateien die von Qt Creator bei der erstellung einer Qt Gui Application erzeugt wurden.</p>
<p>Insgesamt 4 Files. Eine für das Layout<br />
main.cpp</p>
<pre><code>#include &lt;QApplication&gt;
#include &quot;mainwindow.h&quot;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();

}
</code></pre>
<p>die mainwindow.h und die mainwindow.cpp</p>
<pre><code>#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include &lt;QMainWindow&gt;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
</code></pre>
<pre><code>#include &quot;mainwindow.h&quot;
#include &quot;ui_mainwindow.h&quot;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui-&gt;setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
</code></pre>
<p>Und die mainwindow.ui Datei:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;ui version=&quot;4.0&quot;&gt;
 &lt;class&gt;MainWindow&lt;/class&gt;
 &lt;widget class=&quot;QMainWindow&quot; name=&quot;MainWindow&quot;&gt;
  &lt;property name=&quot;geometry&quot;&gt;
   &lt;rect&gt;
    &lt;x&gt;0&lt;/x&gt;
    &lt;y&gt;0&lt;/y&gt;
    &lt;width&gt;400&lt;/width&gt;
    &lt;height&gt;300&lt;/height&gt;
   &lt;/rect&gt;
  &lt;/property&gt;
  &lt;property name=&quot;windowTitle&quot;&gt;
   &lt;string&gt;MainWindow&lt;/string&gt;
  &lt;/property&gt;
  &lt;widget class=&quot;QWidget&quot; name=&quot;centralWidget&quot;/&gt;
  &lt;widget class=&quot;QMenuBar&quot; name=&quot;menuBar&quot;&gt;
   &lt;property name=&quot;geometry&quot;&gt;
    &lt;rect&gt;
     &lt;x&gt;0&lt;/x&gt;
     &lt;y&gt;0&lt;/y&gt;
     &lt;width&gt;400&lt;/width&gt;
     &lt;height&gt;29&lt;/height&gt;
    &lt;/rect&gt;
   &lt;/property&gt;
  &lt;/widget&gt;
  &lt;widget class=&quot;QToolBar&quot; name=&quot;mainToolBar&quot;&gt;
   &lt;attribute name=&quot;toolBarArea&quot;&gt;
    &lt;enum&gt;TopToolBarArea&lt;/enum&gt;
   &lt;/attribute&gt;
   &lt;attribute name=&quot;toolBarBreak&quot;&gt;
    &lt;bool&gt;false&lt;/bool&gt;
   &lt;/attribute&gt;
  &lt;/widget&gt;
  &lt;widget class=&quot;QStatusBar&quot; name=&quot;statusBar&quot;/&gt;
 &lt;/widget&gt;
 &lt;layoutdefault spacing=&quot;6&quot; margin=&quot;11&quot;/&gt;
 &lt;resources/&gt;
 &lt;connections/&gt;
&lt;/ui&gt;
</code></pre>
<p>Die Klasse MainWindow die in mainwindow.h deklariert wurde erbt ja von QMainWindow. Soweit so gut. Vor der Klassendeklaration steht aber auch noch</p>
<pre><code>namespace Ui {
class MainWindow;
}
</code></pre>
<p>Obwohl sich diese Klasse in einem Namensbereich befindet kann der Zeiger UI::MainWindow* ui; in MainWindow Funktionen und Objekte aus der MainWindow Klasse aufrufen. Letztens wollte ich das mal ohne Qt ausprobieren. Doch dies funktionierte nicht. Ich verstehe warum es nicht in standart C++ geht aber ich verstehe nicht warum es in Qt mit entsprechenden Compileroptionen geht.<br />
Hier quasi das gleiche nur in standart C++<br />
a.h</p>
<pre><code>#ifndef A_H
#define A_H

struct A
{
    A();
    int a;
};
#endif // A_H
</code></pre>
<p>display.h</p>
<pre><code>#ifndef A_H
#define A_H

struct A
{
    A();
    int a;
};
#endif // A_H
</code></pre>
<p>a.cpp</p>
<pre><code>#include &quot;a.h&quot;

A::A(): a(0){ }
</code></pre>
<p>display.cpp</p>
<pre><code>#include &quot;display.h&quot;

MainWindow::MainWindow(): ui(new Ui::MainWindow) //ui kann nach meinem Kentnissstand garnicht initialisiert werden weil Ui::MainWindow garnicht definiert wurde.
                                                 //Deshalb auch einen Fehler zur Kompilierungszeit
{

}

MainWindow::~MainWindow() { delete ui; }
</code></pre>
<p>main.cpp</p>
<pre><code>#include &quot;display.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main()
{

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/326718/namensräume-werden-anders-gehandhabt-als-in-standart-c</link><generator>RSS for Node</generator><lastBuildDate>Mon, 25 May 2026 05:46:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326718.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jul 2014 15:00:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Namensräume werden anders gehandhabt als in standart C++? on Thu, 03 Jul 2014 15:00:02 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wunder mich gerade warum folgendes mit Qt gültig ist(was steht weiter unten). Es handelt sich Quelldateien die von Qt Creator bei der erstellung einer Qt Gui Application erzeugt wurden.</p>
<p>Insgesamt 4 Files. Eine für das Layout<br />
main.cpp</p>
<pre><code>#include &lt;QApplication&gt;
#include &quot;mainwindow.h&quot;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();

}
</code></pre>
<p>die mainwindow.h und die mainwindow.cpp</p>
<pre><code>#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include &lt;QMainWindow&gt;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
</code></pre>
<pre><code>#include &quot;mainwindow.h&quot;
#include &quot;ui_mainwindow.h&quot;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui-&gt;setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
</code></pre>
<p>Und die mainwindow.ui Datei:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;ui version=&quot;4.0&quot;&gt;
 &lt;class&gt;MainWindow&lt;/class&gt;
 &lt;widget class=&quot;QMainWindow&quot; name=&quot;MainWindow&quot;&gt;
  &lt;property name=&quot;geometry&quot;&gt;
   &lt;rect&gt;
    &lt;x&gt;0&lt;/x&gt;
    &lt;y&gt;0&lt;/y&gt;
    &lt;width&gt;400&lt;/width&gt;
    &lt;height&gt;300&lt;/height&gt;
   &lt;/rect&gt;
  &lt;/property&gt;
  &lt;property name=&quot;windowTitle&quot;&gt;
   &lt;string&gt;MainWindow&lt;/string&gt;
  &lt;/property&gt;
  &lt;widget class=&quot;QWidget&quot; name=&quot;centralWidget&quot;/&gt;
  &lt;widget class=&quot;QMenuBar&quot; name=&quot;menuBar&quot;&gt;
   &lt;property name=&quot;geometry&quot;&gt;
    &lt;rect&gt;
     &lt;x&gt;0&lt;/x&gt;
     &lt;y&gt;0&lt;/y&gt;
     &lt;width&gt;400&lt;/width&gt;
     &lt;height&gt;29&lt;/height&gt;
    &lt;/rect&gt;
   &lt;/property&gt;
  &lt;/widget&gt;
  &lt;widget class=&quot;QToolBar&quot; name=&quot;mainToolBar&quot;&gt;
   &lt;attribute name=&quot;toolBarArea&quot;&gt;
    &lt;enum&gt;TopToolBarArea&lt;/enum&gt;
   &lt;/attribute&gt;
   &lt;attribute name=&quot;toolBarBreak&quot;&gt;
    &lt;bool&gt;false&lt;/bool&gt;
   &lt;/attribute&gt;
  &lt;/widget&gt;
  &lt;widget class=&quot;QStatusBar&quot; name=&quot;statusBar&quot;/&gt;
 &lt;/widget&gt;
 &lt;layoutdefault spacing=&quot;6&quot; margin=&quot;11&quot;/&gt;
 &lt;resources/&gt;
 &lt;connections/&gt;
&lt;/ui&gt;
</code></pre>
<p>Die Klasse MainWindow die in mainwindow.h deklariert wurde erbt ja von QMainWindow. Soweit so gut. Vor der Klassendeklaration steht aber auch noch</p>
<pre><code>namespace Ui {
class MainWindow;
}
</code></pre>
<p>Obwohl sich diese Klasse in einem Namensbereich befindet kann der Zeiger UI::MainWindow* ui; in MainWindow Funktionen und Objekte aus der MainWindow Klasse aufrufen. Letztens wollte ich das mal ohne Qt ausprobieren. Doch dies funktionierte nicht. Ich verstehe warum es nicht in standart C++ geht aber ich verstehe nicht warum es in Qt mit entsprechenden Compileroptionen geht.<br />
Hier quasi das gleiche nur in standart C++<br />
a.h</p>
<pre><code>#ifndef A_H
#define A_H

struct A
{
    A();
    int a;
};
#endif // A_H
</code></pre>
<p>display.h</p>
<pre><code>#ifndef A_H
#define A_H

struct A
{
    A();
    int a;
};
#endif // A_H
</code></pre>
<p>a.cpp</p>
<pre><code>#include &quot;a.h&quot;

A::A(): a(0){ }
</code></pre>
<p>display.cpp</p>
<pre><code>#include &quot;display.h&quot;

MainWindow::MainWindow(): ui(new Ui::MainWindow) //ui kann nach meinem Kentnissstand garnicht initialisiert werden weil Ui::MainWindow garnicht definiert wurde.
                                                 //Deshalb auch einen Fehler zur Kompilierungszeit
{

}

MainWindow::~MainWindow() { delete ui; }
</code></pre>
<p>main.cpp</p>
<pre><code>#include &quot;display.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main()
{

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406874</guid><dc:creator><![CDATA[Keksman]]></dc:creator><pubDate>Thu, 03 Jul 2014 15:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume werden anders gehandhabt als in standart C++? on Thu, 03 Jul 2014 15:10:07 GMT]]></title><description><![CDATA[<p>Ich vermisse die &quot;ui_mainwindow.h&quot;<br />
Die ist klar, daß MainWindow und und Ui::MainWindow zwei verschiedene Klassen sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406875</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 03 Jul 2014 15:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume werden anders gehandhabt als in standart C++? on Thu, 03 Jul 2014 17:07:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Die ist klar, daß MainWindow und und Ui::MainWindow zwei verschiedene Klassen sind?</p>
</blockquote>
<p>Ja ist mir klar.</p>
<blockquote>
<p>Ich vermisse die &quot;ui_mainwindow.h&quot;</p>
</blockquote>
<p>Danke für den Hinweis. Ich hab sie mir angeguckt jetzt ist alles klar. Ich bin noch relativ neu was Qt angeht und hab die ui_mainwindow.h&quot; Datei die ja bei der Kompilierung neu erzeugt wird völlig vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406891</guid><dc:creator><![CDATA[Keksman]]></dc:creator><pubDate>Thu, 03 Jul 2014 17:07:28 GMT</pubDate></item></channel></rss>