<?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[Verschachtelte Includes]]></title><description><![CDATA[<p>Hi,</p>
<p>Hab da ein Problem, vielleicht hab ich das mit den Includes nicht ganz verstanden oder es läuft irgendwas falsch.</p>
<p>Also folgendes Problem:</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &quot;test.h&quot;
</code></pre>
<p>test.h</p>
<pre><code class="language-cpp">#include &quot;test1.h&quot;
</code></pre>
<p>In test1.h wird string verwendet, und es funktioniert.<br />
Wenn man aber &lt;string&gt; in test.h (vor test1.h) includiert kennt er string in test1.h nicht mehr.</p>
<p>Also etwa so:</p>
<pre><code class="language-cpp">main.cpp:

#include &quot;test.h&quot;

test.h:

#include &lt;string&gt;
#include &quot;test1.h&quot; &lt;- verwendung von string / string aber nicht bekannt
</code></pre>
<p>Warum?<br />
Das dürfte doch keine Rolle spielen, denn es wird ja in beiden Fällen vor der verwendung includiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>PS: string ist nur ein Beispiel, funktioniert auch mit anderen Header nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141205/verschachtelte-includes</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 10:00:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141205.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Mar 2006 09:07:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verschachtelte Includes on Mon, 20 Mar 2006 09:07:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Hab da ein Problem, vielleicht hab ich das mit den Includes nicht ganz verstanden oder es läuft irgendwas falsch.</p>
<p>Also folgendes Problem:</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &quot;test.h&quot;
</code></pre>
<p>test.h</p>
<pre><code class="language-cpp">#include &quot;test1.h&quot;
</code></pre>
<p>In test1.h wird string verwendet, und es funktioniert.<br />
Wenn man aber &lt;string&gt; in test.h (vor test1.h) includiert kennt er string in test1.h nicht mehr.</p>
<p>Also etwa so:</p>
<pre><code class="language-cpp">main.cpp:

#include &quot;test.h&quot;

test.h:

#include &lt;string&gt;
#include &quot;test1.h&quot; &lt;- verwendung von string / string aber nicht bekannt
</code></pre>
<p>Warum?<br />
Das dürfte doch keine Rolle spielen, denn es wird ja in beiden Fällen vor der verwendung includiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>PS: string ist nur ein Beispiel, funktioniert auch mit anderen Header nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020108</guid><dc:creator><![CDATA[Cloud]]></dc:creator><pubDate>Mon, 20 Mar 2006 09:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Includes on Mon, 20 Mar 2006 09:12:43 GMT]]></title><description><![CDATA[<p>Du kannst nur die Namen verwenden, die <strong>vorher</strong> definiert wurden - und wenn sich die &quot;test1.h&quot; darauf verlässt, daß string definiert ist, musst du sie <strong>nach</strong> der &lt;string&gt; einbinden, sonst findet dein Compiler die Namen nicht wieder.</p>
<p>(aber besser ist es sowieso, wenn sich jeder Header selbst um die includes kümmert, die er benötigt - wenn &quot;test1.h&quot; die string-Klasse verwendet, bindest du dort den &lt;string&gt;-Header ein)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020115</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Mar 2006 09:12:43 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Includes on Mon, 20 Mar 2006 10:18:39 GMT]]></title><description><![CDATA[<p>Na das ging ja schnell...</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>wenn sich die &quot;test1.h&quot; darauf verlässt, daß string definiert ist, musst du sie <strong>nach</strong> der &lt;string&gt; einbinden</p>
</blockquote>
<p>Hab ich doch gemacht?<br />
#include &lt;string&gt;<br />
#include &quot;test1.h&quot;</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>(aber besser ist es sowieso, wenn sich jeder Header selbst um die includes kümmert, die er benötigt - wenn &quot;test1.h&quot; die string-Klasse verwendet, bindest du dort den &lt;string&gt;-Header ein)</p>
</blockquote>
<p>Dazu hätte ich auch noch eine Frage.</p>
<p>Mit #ifndef _HEADER_H_ und #define _HEADER_H_ wird verhindert, das der selbe Header zweimal eingebunden wird.</p>
<p>Wenn man jetzt aber noch eine &quot;test2.h&quot; hat, welche ebenfalls string verwendet, ist es denn sinnvoll dort und generell in alle Header die &lt;string&gt; brauchen diesen extra zu includieren?</p>
<p>Ausserdem dürfte das doch auch gar nicht gehen da das #ifndef eine 2te includierung verhindert, oder?<br />
Somit stellt sich mir die Frage warum man dieses #ifndef braucht?<br />
Man wird wohl kaum schreiben:<br />
#include &lt;string&gt;<br />
#include &lt;string&gt;</p>
<p>Und wenn da kein #ifndef steht und man wild rumincludiert, wird doch die .exe riesig, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020154</guid><dc:creator><![CDATA[Cloud]]></dc:creator><pubDate>Mon, 20 Mar 2006 10:18:39 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Includes on Mon, 20 Mar 2006 10:38:52 GMT]]></title><description><![CDATA[<p>Cloud schrieb:</p>
<blockquote>
<p>Na das ging ja schnell...</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>wenn sich die &quot;test1.h&quot; darauf verlässt, daß string definiert ist, musst du sie <strong>nach</strong> der &lt;string&gt; einbinden</p>
</blockquote>
<p>Hab ich doch gemacht?<br />
#include &lt;string&gt;<br />
#include &quot;test1.h&quot;</p>
</blockquote>
<p>Dann könnte ich mir noch vorstellen, daß du Probleme mit falschen namespaces hast.</p>
<blockquote>
<p>Dazu hätte ich auch noch eine Frage.</p>
<p>Mit #ifndef _HEADER_H_ und #define _HEADER_H_ wird verhindert, das der selbe Header zweimal eingebunden wird.</p>
<p>Wenn man jetzt aber noch eine &quot;test2.h&quot; hat, welche ebenfalls string verwendet, ist es denn sinnvoll dort und generell in alle Header die &lt;string&gt; brauchen diesen extra zu includieren?</p>
</blockquote>
<p>Ja, ist schon sinnvoll - und die Standard-Header dürften/sollten auch per include-Guard gesichert sein.</p>
<blockquote>
<p>Ausserdem dürfte das doch auch gar nicht gehen da das #ifndef eine 2te includierung verhindert, oder?</p>
</blockquote>
<p>Klar geht das - wenn in der aktuellen Übersetzungseinheit der Header noch nicht kam, wird er eingebunden. Wenn er schon kam, kann der Compiler auf die Definitionen vom ersten Mal zugreifen.</p>
<blockquote>
<p>Somit stellt sich mir die Frage warum man dieses #ifndef braucht?<br />
Man wird wohl kaum schreiben:<br />
#include &lt;string&gt;<br />
#include &lt;string&gt;</p>
</blockquote>
<p>Direkt wird man das vermutlich nicht schreiben, aber indirekt kann es schon passieren, wenn zwei deiner Header die &lt;string&gt; einbinden.</p>
<blockquote>
<p>Und wenn da kein #ifndef steht und man wild rumincludiert, wird doch die .exe riesig, oder nicht?</p>
</blockquote>
<p>Nein, dann zerhaut's vor allem den Compiler, weil irgendwelche Definitionen zu oft im Quelltext auftauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020173</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Mar 2006 10:38:52 GMT</pubDate></item></channel></rss>