<?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[Namespaceproblem]]></title><description><![CDATA[<p>Hallo,</p>
<p>hier mal etwas, was ich nicht nachvollziehen kann:<br />
ich habe 4 Dateien:</p>
<pre><code class="language-cpp">//Foo.hpp
#include &quot;Bar.hpp&quot;
namespace blubb
{
    class Benutzung
    {
        int set();
    };
}

//Foo.cpp
#include &quot;Foo.hpp&quot;
using namespace blubb;
int Benutzung::set()
{
   ichWerdeBenutzt();
   return 0;
}

//Bar.hpp
namespace blubb
{
   bool ichWerdeBenutzt();
}

//Bar.cpp
#include &quot;Bar.hpp&quot;
using namespace blubb;
bool ichWerdeBenutzt()
{
   //do somthing...
}
</code></pre>
<p>Der Compiler gibt mit bei jedem Aufruf von <code>ichWerdeBenutzt()</code> eine Fehlermeldung aus: <code>undefined reference to ...</code></p>
<p>Das Problem lässt sich dadurch beheben, dass ich in Bar.cpp schreibe:</p>
<pre><code class="language-cpp">//Bar.cpp
#include &quot;Bar.hpp&quot;
using namespace blubb;
bool blubb::ichWerdeBenutzt()
{
   //do somthing...
}
</code></pre>
<p>Das versteh ich nicht. Warum muss ich den Namenraum vor die Funktion schreiben, wenn ich obendrüber schreibe, dass der Compiler den Namensraum benutzen soll?</p>
<p>MfG. Ich</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261619/namespaceproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 05:33:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261619.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Feb 2010 14:18:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Namespaceproblem on Sun, 21 Feb 2010 14:18:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>hier mal etwas, was ich nicht nachvollziehen kann:<br />
ich habe 4 Dateien:</p>
<pre><code class="language-cpp">//Foo.hpp
#include &quot;Bar.hpp&quot;
namespace blubb
{
    class Benutzung
    {
        int set();
    };
}

//Foo.cpp
#include &quot;Foo.hpp&quot;
using namespace blubb;
int Benutzung::set()
{
   ichWerdeBenutzt();
   return 0;
}

//Bar.hpp
namespace blubb
{
   bool ichWerdeBenutzt();
}

//Bar.cpp
#include &quot;Bar.hpp&quot;
using namespace blubb;
bool ichWerdeBenutzt()
{
   //do somthing...
}
</code></pre>
<p>Der Compiler gibt mit bei jedem Aufruf von <code>ichWerdeBenutzt()</code> eine Fehlermeldung aus: <code>undefined reference to ...</code></p>
<p>Das Problem lässt sich dadurch beheben, dass ich in Bar.cpp schreibe:</p>
<pre><code class="language-cpp">//Bar.cpp
#include &quot;Bar.hpp&quot;
using namespace blubb;
bool blubb::ichWerdeBenutzt()
{
   //do somthing...
}
</code></pre>
<p>Das versteh ich nicht. Warum muss ich den Namenraum vor die Funktion schreiben, wenn ich obendrüber schreibe, dass der Compiler den Namensraum benutzen soll?</p>
<p>MfG. Ich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859092</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Sun, 21 Feb 2010 14:18:49 GMT</pubDate></item><item><title><![CDATA[Reply to Namespaceproblem on Sun, 21 Feb 2010 14:36:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Das versteh ich nicht. Warum muss ich den Namenraum vor die Funktion schreiben, wenn ich obendrüber schreibe, dass der Compiler den Namensraum benutzen soll?</p>
</blockquote>
<p>Na, das ist einfach. Schau dir mal das an:</p>
<pre><code class="language-cpp">bool ichWerdeBenutzt()
{
   //do somthing...
}
bool blubb::ichWerdeBenutzt()
{
   //do somthing...
}
</code></pre>
<p>Das Eine ist eine Funktion die im namespace blubb liegt, die andere liegt im globalen Namensraum.</p>
<p>Wenn du also nun sowas hast:</p>
<pre><code class="language-cpp">using namespace blubb;
using namespace foo;
bool ichWerdeBenutzt()
{
   //do somthing...
}
</code></pre>
<p>Wie soll der Compiler dann unterscheiden, ob das ein blubb::ichWerdeBenutzt, ein foo::ichWerdeBenutzt oder ein ::ichWerdeBenutzt ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859097</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 21 Feb 2010 14:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Namespaceproblem on Sun, 21 Feb 2010 14:33:53 GMT]]></title><description><![CDATA[<p>das hier ist falsch:</p>
<pre><code class="language-cpp">#include &quot;Foo.hpp&quot; 
using namespace blubb; 
int Benutzung::set() 
{ 
   ichWerdeBenutzt(); 
   return 0; 
}
</code></pre>
<p>ein using reicht hier _nicht_<br />
so sollte es aussehen:</p>
<pre><code class="language-cpp">#include &quot;Foo.hpp&quot;

namespace blubb{

int Benutzung::set() 
{ 
   ichWerdeBenutzt(); 
   return 0; 
}

} //namespace blubb
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859098</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 21 Feb 2010 14:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to Namespaceproblem on Sun, 21 Feb 2010 14:36:29 GMT]]></title><description><![CDATA[<p>Das &quot;using namespace ...&quot; besagt nur, daß für den Lookup die Namen aus diesem Namensbereich mit benutzt werden sollen, aber für die Definition benötigst du die konkrete Zuordnung.<br />
Eine andere Möglichkeit (äquivalent zu den Header-Dateien) wäre:</p>
<pre><code class="language-cpp">//Bar.cpp
#include &quot;Bar.hpp&quot;

namespace blubb
{

bool ichWerdeBenutzt()
{
   //do something...
}

} // namespace blubb
</code></pre>
<p>Dies macht jedoch Probleme, wenn du innerhalb dieser Funktionsdefinitionen noch lokale Definitionen (o.a.) benötigst.</p>
<p>Üblich ist daher die Form:</p>
<pre><code class="language-cpp">bool blubb:ichWerdeBenutzt()
</code></pre>
<p>auch wenn es mehr Schreibarbeit bedeutet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859102</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 21 Feb 2010 14:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to Namespaceproblem on Sun, 21 Feb 2010 15:10:37 GMT]]></title><description><![CDATA[<p>Also gilt die Regel, dass ich bei Definitionen <code>namespace xyz{...}</code> benutze, und bei Aufrufen/Verwendungen <code>using namespace xyz</code> ?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a></p>
<blockquote>
<p>Wie soll der Compiler dann unterscheiden, ob das ein blubb::ichWerdeBenutzt, ein foo::ichWerdeBenutzt oder ein ::ichWerdeBenutzt ist?</p>
</blockquote>
<p>Wäre das der Fall, hätte der Compiler/Linker mir nicht <code>undefinded reference</code> sondern <code>xyz is ambigous</code> ausgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859130</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Sun, 21 Feb 2010 15:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to Namespaceproblem on Sun, 21 Feb 2010 15:20:52 GMT]]></title><description><![CDATA[<p>Ich glaube, dass das Problem hier eine falsche Definition von <code>using namespace</code> ist. Also ChristophLu hat hier eine falsche Vorstellung von <code>using namespace</code> .</p>
<p><code>using namespace</code> sagt nicht aus, dass der Kompiler nun diesen Namensraum verwenden soll. Es sagt dem Kompiler, dass er den Namensraum im aktuellen Namensraum ausleeren soll. Wenn wir also folgendes haben &quot; <code>using namespace xyz</code> &quot; und wir befinden uns im Namensraum <code>bbb</code> , dann wir alles was sich im Namensraum <code>xyz</code> befindet, in den Namensraum <code>bbb</code> geleert. Deshalb sage ich auch immer, dass man <code>using namespace</code> sehr vorsichtig und überlegt verwenden sollte.</p>
<p>Man kann schliesslich auch bei der Verwendung ohne <code>using namespace</code> vorgehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
  std::cout &lt;&lt; &quot;Hello World!&quot; &lt;&lt; std::endl;
//^^^^^      explizite Angabe    ^^^^^

  return 0;
}
</code></pre>
<p>Zusammengefasst:<br />
&quot;using namespace&quot; heisst nicht &quot;verwende Namensraum&quot;, sondern heisst &quot;leere Namensraum hier aus&quot;.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859137</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 21 Feb 2010 15:20:52 GMT</pubDate></item><item><title><![CDATA[Reply to Namespaceproblem on Sun, 21 Feb 2010 15:43:00 GMT]]></title><description><![CDATA[<p>ah ... achso. Gut, also hab ichs falsch verstanden. Das erklärt auch manch anderes Problem <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="😉"
    /></p>
<p>Danke Dravere!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859145</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Sun, 21 Feb 2010 15:43:00 GMT</pubDate></item></channel></rss>