<?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[Namespace + Class]]></title><description><![CDATA[<p>Hi,</p>
<p>was haben die ersten beiden Zeilen unter Namespace zu bedeuten?</p>
<p>namespace test{<br />
class klasse1;<br />
class klasse2;</p>
<p>class klasse3{<br />
......<br />
}<br />
}</p>
<p>Gruß<br />
Boris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153253/namespace-class</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 07:27:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153253.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Jul 2006 13:53:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Namespace + Class on Fri, 14 Jul 2006 13:53:51 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>was haben die ersten beiden Zeilen unter Namespace zu bedeuten?</p>
<p>namespace test{<br />
class klasse1;<br />
class klasse2;</p>
<p>class klasse3{<br />
......<br />
}<br />
}</p>
<p>Gruß<br />
Boris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097747</guid><dc:creator><![CDATA[hjdt]]></dc:creator><pubDate>Fri, 14 Jul 2006 13:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Fri, 14 Jul 2006 13:59:23 GMT]]></title><description><![CDATA[<p>Das sind sogenannte Forwarddeklarationen. Damit wird bekanntgegeben, dass diese beiden Klassen existieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097749</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 14 Jul 2006 13:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Fri, 14 Jul 2006 14:08:28 GMT]]></title><description><![CDATA[<p>Muss ich dann auch die Headerfiles der einzelnen Klassen einbinden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097754</guid><dc:creator><![CDATA[hjdt]]></dc:creator><pubDate>Fri, 14 Jul 2006 14:08:28 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Fri, 14 Jul 2006 14:19:39 GMT]]></title><description><![CDATA[<p>Nein, das ist sozusagen ein Ersatz dafür. Manchmal braucht man das auch, weil der header der anderen Klasse das benötigt, was aktuell erst definiert wird. Durch die Vorwärts-Deklaration wird dieser Zyklus dann aufgebrochen.</p>
<p>Allerdings kann man mit einer Klasse, die nur durch eine forward-Deklaration bekannt gemacht wurde nicht alles machen. Du kannst nur Pointer und Referenzen auf diese Klasse definieren, aber keine Methoden davon aufrufen oder Objekte der Klasse erzeugen. Dafür benötigt der Compiler nämlich Informationen, die nur in der vollständigen Deklaration der Klasse enthalten sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097762</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 14 Jul 2006 14:19:39 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Fri, 14 Jul 2006 15:08:30 GMT]]></title><description><![CDATA[<p>Ok, danke das habe ich verstanden.</p>
<p>Nun begreife ich aber folgendes Problem nicht:</p>
<p>datei1.hpp:</p>
<pre><code class="language-cpp">namespace test{
class klasse1{
private:
.....

public:
friend inline klasse1 f(const klasse1&amp;);
}
}

#include &quot;datei1.cpp&quot;
</code></pre>
<p>datei1.cpp:</p>
<pre><code class="language-cpp">namespace test{
inline klasse1 f(const klasse1 &amp;a){
...
}
}
</code></pre>
<p>datei2.hpp</p>
<pre><code class="language-cpp">namespace test{
class klasse2{
private:
.....

public:
friend inline klasse2 f(const klasse2&amp;);
}
}

#include &quot;datei2.cpp&quot;
</code></pre>
<p>datei2.cpp:</p>
<pre><code class="language-cpp">namespace test{
int g(int a){
int m = f(....);
...
}
}
</code></pre>
<p>Dann sagt g++-4.1.1: &quot;f is not defined in this Scope&quot;.<br />
Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097789</guid><dc:creator><![CDATA[hjdt]]></dc:creator><pubDate>Fri, 14 Jul 2006 15:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Fri, 14 Jul 2006 16:01:51 GMT]]></title><description><![CDATA[<p>Weil f ein Mitglied von klasse1 ist, keine freistehende Funktion. Du brauchst ein Objekt, um sie aufzurufen.</p>
<p>Desweiteren definierst Du in datei1.cpp nicht die in datei1.h deklarierte Funktion, sondern eine neue, freistehende Funktion, die allerdings in datei2.cpp nicht bekannt ist (da in keinem Header deklariert)</p>
<p>Und drittens bedeutet inline, dass beim Aufruf der Funktion der Code der Funktion selbst eingesetzt werden soll (also eben kein Aufruf stattfindet), und das funktioniert sowieso nicht wenn der Code nur in einer Übersetzungseinheit bekannt ist. Was möchtest Du überhaupt erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097823</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 14 Jul 2006 16:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Sat, 15 Jul 2006 08:50:13 GMT]]></title><description><![CDATA[<blockquote>
<p>Weil f ein Mitglied von klasse1 ist, keine freistehende Funktion. Du brauchst ein Objekt, um sie aufzurufen.</p>
</blockquote>
<p>Ok, das ist mir nicht klar, denn die Funktion ist als friend deklariert und das bedeutet, dass sie ohne Objekt direkt aufgerufen werden kann. Wenn ich das richtig verstanden habe.</p>
<blockquote>
<p>Desweiteren definierst Du in datei1.cpp nicht die in datei1.h deklarierte Funktion, sondern eine neue, freistehende Funktion, die allerdings in datei2.cpp nicht bekannt ist (da in keinem Header deklariert)</p>
</blockquote>
<p>Das verstehe ich nicht. Ich deklariere die friend-Funktion f in datei1.hpp und implementiere sie in datei1.cpp. Was ist daran verschieden?</p>
<blockquote>
<p>Und drittens bedeutet inline, dass beim Aufruf der Funktion der Code der Funktion selbst eingesetzt werden soll (also eben kein Aufruf stattfindet), und das funktioniert sowieso nicht wenn der Code nur in einer Übersetzungseinheit bekannt ist. Was möchtest Du überhaupt erreichen?</p>
</blockquote>
<p>Na ja gut, was inline ist und nicht, entscheidet sowieso der Compiler. Ich baue eine Klassenbibliothek aus rund 1500 Dateien, die möglischst Laufzeiteffizient sein soll. Zwei Klassen benutzen eben die gleiche Funktion f, um sie nicht zweimal zu implementieren, möchte ich diese Funktion aus der anderen Klasse verwenden. Deswegen friend. Ist das falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098072</guid><dc:creator><![CDATA[hjdt]]></dc:creator><pubDate>Sat, 15 Jul 2006 08:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Wed, 18 Mar 2009 17:27:47 GMT]]></title><description><![CDATA[<p>hjdt schrieb:</p>
<blockquote>
<p>...denn die Funktion ist als friend deklariert und das bedeutet, dass sie ohne Objekt direkt aufgerufen werden kann. ...</p>
</blockquote>
<p><code>static</code> , nicht <code>friend</code> . <code>friend</code> ist dazu da, um Beziehungen zwischen Klassen und deren Elementen herzustellen (d.h. man kann z.B. durch Operator-Überladung dafür sorgen, dass ein <code>cout</code> -Objekt das eigene Objekt als rhs-Operand übernehmen kann, obwohl in <code>cout</code> natürlich keine Überladung hierfür vorgenommen wurde). Bei <code>static</code> wird kein Objekt für den Aufruf benötigt, allerdings sieht der Aufruf dann so aus:</p>
<pre><code class="language-cpp">klassenname::funktionsname();
</code></pre>
<p>Das mit dem <code>inline</code> : Je nach Compiler-Einstellung kann man den Compiler darum bitten, das so effizient wie möglich zu handhaben, aber wenn wirklich alle Funktionen als <code>inline</code> gelten, hast du zwar eine unheimlich laufzeiteffiziente Bibliothek, aber der Preis dafür ist hoch: viel zu viel Speicher (ist allerdings nur eine Warnung meinerseits, hab ja nicht alle 1500 Dateien hier zum durchsehen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098136</guid><dc:creator><![CDATA[skreutzer]]></dc:creator><pubDate>Wed, 18 Mar 2009 17:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Sat, 15 Jul 2006 11:31:56 GMT]]></title><description><![CDATA[<p>Ah, ja sicher, das friend habe ich übersehen, sorry.<br />
Liegt vermutlich daran dass datei1.hpp in datei2.cpp nicht inkludet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098141</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 15 Jul 2006 11:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Sun, 16 Jul 2006 10:20:08 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ah, ja sicher, das friend habe ich übersehen, sorry.<br />
Liegt vermutlich daran dass datei1.hpp in datei2.cpp nicht inkludet wird.</p>
</blockquote>
<p>Doch habe ich, es funktioniert aber troetzdem nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098484</guid><dc:creator><![CDATA[hjdt]]></dc:creator><pubDate>Sun, 16 Jul 2006 10:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Sun, 16 Jul 2006 10:32:51 GMT]]></title><description><![CDATA[<p>Du hast da was falsch verstanden. Du mußt nicht die cpp-Dateien in die Header includen, sondern umkegehrt. cpp-Dateien werden nie includet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098488</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 16 Jul 2006 10:32:51 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Sun, 16 Jul 2006 10:36:11 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Du hast da was falsch verstanden. Du mußt nicht die cpp-Dateien in die Header includen, sondern umkegehrt. cpp-Dateien werden nie includet.</p>
</blockquote>
<p>Das ist schon klar, das steht ja auch nicht da.</p>
<p>Apropos, ich habe gerade festgestellt, dass das Problem erst mit dem gcc-4.1.0 beginnt, vorher lässt sich alles prima übersetzen,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098490</guid><dc:creator><![CDATA[hjdt]]></dc:creator><pubDate>Sun, 16 Jul 2006 10:36:11 GMT</pubDate></item><item><title><![CDATA[Reply to Namespace + Class on Sun, 16 Jul 2006 10:38:30 GMT]]></title><description><![CDATA[<p>hjdt schrieb:</p>
<blockquote>
<p>Jester schrieb:</p>
<blockquote>
<p>Du hast da was falsch verstanden. Du mußt nicht die cpp-Dateien in die Header includen, sondern umkegehrt. cpp-Dateien werden nie includet.</p>
</blockquote>
<p>Das ist schon klar, das steht ja auch nicht da.</p>
</blockquote>
<p>Naja, in dem Beispiel, das Du gepostet hast steht's halt falschrum drin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098492</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 16 Jul 2006 10:38:30 GMT</pubDate></item></channel></rss>