<?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[Spielt es eine Rolle, wo Forward Declaration gemacht wird?]]></title><description><![CDATA[<p>Sagen wir ich habe eine Klasse</p>
<pre><code class="language-cpp">namespace NS {
Class1 { };
}
</code></pre>
<p>und auf die will ich im Header Bar eine Forward Declaration (FD) anlegen:</p>
<pre><code class="language-cpp">// Bar.h

namespace NS {

namespace NS2 {

class Bar {
   Class1* c;
};

}

}
</code></pre>
<p>Wo muss ich jetzt die FD hinschreiben? Innerhalb von NS (aber nicht in NS2)? Oder global? Oder ist es egal? Und muss ich dann eigentlich NS::Class1 c; in Bar schreiben oder reicht Class1?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246664/spielt-es-eine-rolle-wo-forward-declaration-gemacht-wird</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 00:21:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246664.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Jul 2009 22:34:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spielt es eine Rolle, wo Forward Declaration gemacht wird? on Thu, 30 Jul 2009 22:34:34 GMT]]></title><description><![CDATA[<p>Sagen wir ich habe eine Klasse</p>
<pre><code class="language-cpp">namespace NS {
Class1 { };
}
</code></pre>
<p>und auf die will ich im Header Bar eine Forward Declaration (FD) anlegen:</p>
<pre><code class="language-cpp">// Bar.h

namespace NS {

namespace NS2 {

class Bar {
   Class1* c;
};

}

}
</code></pre>
<p>Wo muss ich jetzt die FD hinschreiben? Innerhalb von NS (aber nicht in NS2)? Oder global? Oder ist es egal? Und muss ich dann eigentlich NS::Class1 c; in Bar schreiben oder reicht Class1?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1752684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752684</guid><dc:creator><![CDATA[mooper]]></dc:creator><pubDate>Thu, 30 Jul 2009 22:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Spielt es eine Rolle, wo Forward Declaration gemacht wird? on Fri, 31 Jul 2009 07:18:10 GMT]]></title><description><![CDATA[<p>mooper schrieb:</p>
<blockquote>
<p>Wo muss ich jetzt die FD hinschreiben? Innerhalb von NS (aber nicht in NS2)? Oder global?</p>
</blockquote>
<p>Dort wo Class1 später definiert wird.</p>
<p>mooper schrieb:</p>
<blockquote>
<p>Und muss ich dann eigentlich NS::Class1 c; in Bar schreiben oder reicht Class1?</p>
</blockquote>
<p>Wenn Bar irgendwo innerhalb von NS oder einem untergeordneten Namespace ist, dann reicht das eigentlich. Der Compiler sucht dann in den übergeordneten Namespaces. Aber Vorsicht:</p>
<pre><code class="language-cpp">//n1n2_class1.h
namespace N1 {
namespace N2 {
  class Class1 {};  //N1::N2::Class1
}}

//n1_class1.h
namespace N1 {
  class Class1 {}; //N1::Class1
}

//n1n2_bar.h
#include &quot;n1_class1.h&quot;
namespace N1 {
namespace N2 {  
  class Bar
  {
    Class1* p1;
  };
}}

//A.cpp
#include n1n2_bar.h //Bar benutzt N1::Class1
#include n1n2_class1.h

//B.cpp
#include n1n2_class1.h
#include n1n2_bar.h //Oops! Bar benutzt N1::N2::Class1
</code></pre>
<p>Das Problem daran ist, dass erst die #includes ausgeführt werden und danach erst die Namen aufgelöst werden. In der Übersetzungseinheit von A ist zum Zeitpunkt der Bar-Definition nur N1::class1 bekannt. in B ist auch N1::N2::class1 bekannt, und die hat Vorrang!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1752758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752758</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 31 Jul 2009 07:18:10 GMT</pubDate></item></channel></rss>