<?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: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich verwende die Boost-Bibliothek (u. a. für Serialisierung und Operationen auf Dateien und Pfaden) und habe ein Problem bei der Definition eigener Namensräume. Wenn ich z. B. eine Verschachtelung von Namensräumen habe, wie kann ich dann wieder auf die boost-Funktionen zugreifen? Bei STL-Konstrukten funktioniert der Zugriff auf den globalen Namensraum ja z. B. einfach per &quot;::std::string&quot;, aber bei boost klappt es weder per &quot;::boost::...&quot; noch per &quot;boost::...&quot;.</p>
<p>Jedenfalls kommen beim Kompilieren hunderte Warnungen und Fehler, die einzig und alleine mit diesen Namensräumen in Zusammenhang mit boost zu tun haben, denn vor deren Einführung lief alles perfekt. Ich brauche sie jedoch zur besseren Strukturierung und Übersicht.</p>
<p>Am einfachsten lässt es sich wie immer an einem Beispiel erklären:</p>
<pre><code class="language-cpp">// Header-Datei
...
#include &lt;boost/serialization/map.hpp&gt;
#include &lt;boost/filesystem/operations.hpp&gt;
#include &lt;boost/filesystem/path.hpp&gt;
#include &lt;string&gt;
...

namespace ns1 {
namespace ns2 {

class Klasse {
  private:
    boost::filesystem::path pfad; // Wie müsste der korrekte Zugriff lauten?
    ::std::string bla;
  public
    void doSomething();
};

}}
</code></pre>
<pre><code class="language-cpp">// Implementierungsdatei
namespace ns1 {
namespace ns2 {
 void Klasse::doSomething() {
 }
}}
</code></pre>
<pre><code class="language-cpp">// Anwendungsdatei
#include &quot;Klasse.h&quot;

using ns1::ns2::Klasse;

int main() {
 Klasse k;
 k.doSomething();
 return 0;
}
</code></pre>
<p>In den Warnungen/Fehlern sehe ich überall Dinge wie &quot;ns1::ns2::boost::...&quot;. Meien Frage lautet daher: Wie kann ich dem Compiler verklickern, dass der boost-Namensraum außerhalb der Namensräume ns1 und ns2 existiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220674/namensräume-quot-rücksprung-quot-in-namensraum-einer-speziellen-bibliothek</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 18:05:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220674.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Aug 2008 15:09:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 15:11:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich verwende die Boost-Bibliothek (u. a. für Serialisierung und Operationen auf Dateien und Pfaden) und habe ein Problem bei der Definition eigener Namensräume. Wenn ich z. B. eine Verschachtelung von Namensräumen habe, wie kann ich dann wieder auf die boost-Funktionen zugreifen? Bei STL-Konstrukten funktioniert der Zugriff auf den globalen Namensraum ja z. B. einfach per &quot;::std::string&quot;, aber bei boost klappt es weder per &quot;::boost::...&quot; noch per &quot;boost::...&quot;.</p>
<p>Jedenfalls kommen beim Kompilieren hunderte Warnungen und Fehler, die einzig und alleine mit diesen Namensräumen in Zusammenhang mit boost zu tun haben, denn vor deren Einführung lief alles perfekt. Ich brauche sie jedoch zur besseren Strukturierung und Übersicht.</p>
<p>Am einfachsten lässt es sich wie immer an einem Beispiel erklären:</p>
<pre><code class="language-cpp">// Header-Datei
...
#include &lt;boost/serialization/map.hpp&gt;
#include &lt;boost/filesystem/operations.hpp&gt;
#include &lt;boost/filesystem/path.hpp&gt;
#include &lt;string&gt;
...

namespace ns1 {
namespace ns2 {

class Klasse {
  private:
    boost::filesystem::path pfad; // Wie müsste der korrekte Zugriff lauten?
    ::std::string bla;
  public
    void doSomething();
};

}}
</code></pre>
<pre><code class="language-cpp">// Implementierungsdatei
namespace ns1 {
namespace ns2 {
 void Klasse::doSomething() {
 }
}}
</code></pre>
<pre><code class="language-cpp">// Anwendungsdatei
#include &quot;Klasse.h&quot;

using ns1::ns2::Klasse;

int main() {
 Klasse k;
 k.doSomething();
 return 0;
}
</code></pre>
<p>In den Warnungen/Fehlern sehe ich überall Dinge wie &quot;ns1::ns2::boost::...&quot;. Meien Frage lautet daher: Wie kann ich dem Compiler verklickern, dass der boost-Namensraum außerhalb der Namensräume ns1 und ns2 existiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567677</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Tue, 19 Aug 2008 15:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 15:24:49 GMT]]></title><description><![CDATA[<blockquote>
<p>boost::filesystem::path pfad</p>
</blockquote>
<p>Das ist so schon richtig.</p>
<blockquote>
<p>Meien Frage lautet daher: Wie kann ich dem Compiler verklickern, dass der boost-Namensraum außerhalb der Namensräume ns1 und ns2 existiert?</p>
</blockquote>
<p>Warum ausserhalb? Du brauchst es ja lediglich in der Klasse. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567687</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 19 Aug 2008 15:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 15:32:10 GMT]]></title><description><![CDATA[<p>Ok, aber wenn ich innerhalb der Klasse darauf per &quot;boost::...&quot; zugreife, hagelt es die Fehler und Warnungen. Muss ich sonst etwas beachten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567694</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Tue, 19 Aug 2008 15:32:10 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 15:36:02 GMT]]></title><description><![CDATA[<p>Es wäre vielleicht sinnvoll, wenn du uns sagen würdest, was für Fehler es hagelt. Denn man benutzt es genau so.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567696</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 19 Aug 2008 15:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 15:38:19 GMT]]></title><description><![CDATA[<p>TheBrain schrieb:</p>
<blockquote>
<p>Ok, aber wenn ich innerhalb der Klasse darauf per &quot;boost::...&quot; zugreife, hagelt es die Fehler und Warnungen. Muss ich sonst etwas beachten?</p>
</blockquote>
<p>Richtig includen und das ist es gewesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567701</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 19 Aug 2008 15:38:19 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 16:14:15 GMT]]></title><description><![CDATA[<p>Und wieso muss ich dann bei STL-Konstrukten &quot;::std::...&quot; verwenden? Es treten wirklich hunderte, wenn nicht tausende Warnungen/Fehler auf, hauptsächlich werden dabei irgend welche boost-Dateien erwähnt. Aussagen tun die ganzen Dinger allerdings nichts. Ich vermute, die sind alle auf die Namensräume zurückzuführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567729</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Tue, 19 Aug 2008 16:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 16:22:53 GMT]]></title><description><![CDATA[<p>TheBrain schrieb:</p>
<blockquote>
<p>Und wieso muss ich dann bei STL-Konstrukten &quot;::std::...&quot; verwenden? Es treten wirklich hunderte, wenn nicht tausende Warnungen/Fehler auf, hauptsächlich werden dabei irgend welche boost-Dateien erwähnt. Aussagen tun die ganzen Dinger allerdings nichts. Ich vermute, die sind alle auf die Namensräume zurückzuführen.</p>
</blockquote>
<p>Musst du doch gar nicht, nur wenn zwischen :: und dem aktuellen Namensraum noch ein std-Namensraum stehen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567736</guid><dc:creator><![CDATA[S.T.A.L.K.E.R.]]></dc:creator><pubDate>Tue, 19 Aug 2008 16:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 16:48:53 GMT]]></title><description><![CDATA[<p>Also, bin noch mal &quot;rüber&quot; ins Linux, hier ein paar Fehlermeldungstypen:</p>
<pre><code>&quot;Fehler: BlaBlupp wurde in diesem Gültigkeitsbereich nicht definiert&quot;
&quot;Fehler: Basisoperand von »-&gt;« hat Nicht-Zeiger-Typ »ns1::ns2::boost::filesystem::directory_iterator«&quot;
&quot;Fehler: »cerr« ist kein Element von »ns1::ns2::std«
</code></pre>
<p>Und dann noch unzählige daraus resultierende Fehler wie</p>
<pre><code>&quot;/usr/include/c++/4.2/bits/fstream.tcc:50: Fehler: invalid use of incomplete type »class ns1::ns2::std::basic_filebuf&lt;_CharT, _Traits&gt;«&quot;
</code></pre>
<p>Gibt es irgend etwas, was ich bei der verwendung eigener Namensräume sonst noch beachte muss? Wie sieht es mit using-Direktiven aus? Wenn ich z. B. eine weitere Klasse im Namensraum ns1::ns2 erstelle und darin eine andere Klasse des gleichen Namensraums verwende, kann/muss ich diese dann jedes Mal z. B. per ns1::ns2::Klasse verwenden oder kann ich per &quot;using ns1::ns2::Klasse;&quot; die Schreibweise abkürzen oder muss ich gar keinen Namensraum angeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567754</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Tue, 19 Aug 2008 16:48:53 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 16:51:23 GMT]]></title><description><![CDATA[<p>Du inkludierst die Header nicht zufällig innerhalb deines Namensraums?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567756</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Tue, 19 Aug 2008 16:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Tue, 19 Aug 2008 20:17:46 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Du inkludierst die Header nicht zufällig innerhalb deines Namensraums?</p>
</blockquote>
<p>Natürlich tut er das, das hat ja drakon auch vermutlich gemeint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567857</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 19 Aug 2008 20:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Wed, 20 Aug 2008 07:46:47 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Tippgeber schrieb:</p>
<blockquote>
<p>Du inkludierst die Header nicht zufällig innerhalb deines Namensraums?</p>
</blockquote>
<p>Natürlich tut er das, das hat ja drakon auch vermutlich gemeint.</p>
</blockquote>
<p>Nein. Die Reihenfolge, die ich verwende, ist folgende:</p>
<pre><code class="language-cpp">#ifndef HEADER_H // entfällt natürlich bei Implementierungsdateien
#define HEADER_H // &quot;

#include ...
#include ...

using ...
using ...

ns1 {
 ns2 {
  class Klasse {
  ...
  };
 }
}

#endif // entfällt natürlich bei Implementierungsdateien
</code></pre>
<p>Ist diese Reihenfolge so grundsätzlich in Ordnung?</p>
<p>Zu meiner Schande muss ich gestehen, dass ich doch tatsächlich in einer der Header-Dateien eine schließende geschweifte Klammer vergessen habe, die den äußeren Namensraum wieder schließt. Ich entschuldige mich dafür in aller Form bei euch! Da hätten wir noch lange suchen können ...</p>
<p>Herzlichen Dank für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567958</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Wed, 20 Aug 2008 07:46:47 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Wed, 20 Aug 2008 15:53:08 GMT]]></title><description><![CDATA[<p>Ja die Reihenfolge ist OK.</p>
<p>Was nicht so toll ist ist das using in Header-Files.</p>
<p>Und wenn schon unbedingt, dann eher in deinem Namespace und nicht gleich im global namespace.</p>
<p>Also eher so (doch wieder andere Reihenfolge):</p>
<pre><code class="language-cpp">#ifndef HEADER_H
#define HEADER_H

#include ...
#include ...

ns1 {
 ns2 {

  using ... // weglassen wenn nicht unbedingt nötig
  using ... // weglassen wenn nicht unbedingt nötig

  class Klasse {
  ...
  };
 }
}

#endif
</code></pre>
<p>In den .cpp Files kannst du das using im Prinzip hinschreiben wo du magst, das gilt dann ja immer nur für das eine File, ist dann nicht weiter schlimm.</p>
<blockquote>
<p>Zu meiner Schande muss ich gestehen, dass ich doch tatsächlich in einer der Header-Dateien eine schließende geschweifte Klammer vergessen habe</p>
</blockquote>
<p>Und damit hattest du ein include innerhalb eines Namespace stehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Wenn auch ohne es zu merken oder beabsichtigt zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568428</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 Aug 2008 15:53:08 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Wed, 20 Aug 2008 16:08:33 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>In den .cpp Files kannst du das using im Prinzip hinschreiben <strong>wo du magst</strong>, das gilt dann ja immer nur für das eine File, ist dann nicht weiter schlimm.</p>
</blockquote>
<p>Einspruch bzw. Einschränkung: Überall <strong>nach</strong> den Includes :).</p>
<p>Sonst haben diese nämlich auch schon was von der Namespace Pollution.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568447</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 20 Aug 2008 16:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to Namensräume: &amp;quot;Rücksprung&amp;quot; in Namensraum einer speziellen Bibliothek on Wed, 20 Aug 2008 17:44:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>: ja. gut. korrekt.<br />
Natürlich sollte man includes allerdings auch immer so schreiben dass es wurscht ist wie verschmutzt der globale Namespace ist. Tut zwar vermutlich kaum jemand, aber das ist wieder was anderes <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568482</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 Aug 2008 17:44:56 GMT</pubDate></item></channel></rss>