<?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[namespaces]]></title><description><![CDATA[<p>Ich habe in meinem Projekt bis jz immer alles im globalen Namespace deklariert -wollte das jz aber ändern, weil es ja schon ein wenig übersichtlicher ist ^^ So weit, so gut, aber jz mein Problem:</p>
<p>irgend ne *.hpp:</p>
<pre><code class="language-cpp">//ifndef / define
//benötigte system-includes (string / vector / ....)
#include &quot;clients.hpp&quot; //namespace user

//fkt werden definiert...
std::string GetPreisStringFromInt (const user::GELD &amp;v); //Compiler-FEHLER -&gt; user ist kein namespace -.-

//endif
</code></pre>
<p>clients.hpp</p>
<pre><code class="language-cpp">//ifndef / define

//system-includes (string + vector + iterator)

#include &quot;threads.hpp&quot; //client-klasse erbt ja von threads
#include &quot;sock.hpp&quot; //da ist die obere datei wieder eingebunden - das kommt aber öfters vor, dass es so einen &quot;Kreis&quot; gibt
//weitere includes...

namespace user
{
/*viele andere Namespaces, const-Werte bzw typedef's*/
};

class clientclass
 {
  public: class client
   {
    /*...*/
   };
  /*...*/
 };

namespace user
{
/*noch paar Iteratoren usw als typedefs, damit ich ne immer so viel tippen muss ;) */
};
</code></pre>
<p>Hab ich hier irgendwas grundlegendes falsch gemacht? Oo<br />
Das komisch ist ja, dass die IDE weiß, dass user nen namespace ist (synthax-vervollständigung und beim mauszeiger drüberhalten etc) - der compiler aber nicht mehr :&lt;</p>
<p>IDE: VS 2005: Teamsuite<br />
OS: Win XP Prof</p>
<p>Danke...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205750/namespaces</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 12:33:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205750.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Feb 2008 17:39:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 17:39:18 GMT]]></title><description><![CDATA[<p>Ich habe in meinem Projekt bis jz immer alles im globalen Namespace deklariert -wollte das jz aber ändern, weil es ja schon ein wenig übersichtlicher ist ^^ So weit, so gut, aber jz mein Problem:</p>
<p>irgend ne *.hpp:</p>
<pre><code class="language-cpp">//ifndef / define
//benötigte system-includes (string / vector / ....)
#include &quot;clients.hpp&quot; //namespace user

//fkt werden definiert...
std::string GetPreisStringFromInt (const user::GELD &amp;v); //Compiler-FEHLER -&gt; user ist kein namespace -.-

//endif
</code></pre>
<p>clients.hpp</p>
<pre><code class="language-cpp">//ifndef / define

//system-includes (string + vector + iterator)

#include &quot;threads.hpp&quot; //client-klasse erbt ja von threads
#include &quot;sock.hpp&quot; //da ist die obere datei wieder eingebunden - das kommt aber öfters vor, dass es so einen &quot;Kreis&quot; gibt
//weitere includes...

namespace user
{
/*viele andere Namespaces, const-Werte bzw typedef's*/
};

class clientclass
 {
  public: class client
   {
    /*...*/
   };
  /*...*/
 };

namespace user
{
/*noch paar Iteratoren usw als typedefs, damit ich ne immer so viel tippen muss ;) */
};
</code></pre>
<p>Hab ich hier irgendwas grundlegendes falsch gemacht? Oo<br />
Das komisch ist ja, dass die IDE weiß, dass user nen namespace ist (synthax-vervollständigung und beim mauszeiger drüberhalten etc) - der compiler aber nicht mehr :&lt;</p>
<p>IDE: VS 2005: Teamsuite<br />
OS: Win XP Prof</p>
<p>Danke...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457676</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 Feb 2008 17:39:18 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 17:52:56 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class clientclass
 {
  public: class client
</code></pre>
<p>=&gt;</p>
<pre><code class="language-cpp">class client_class : public class
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457687</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 17 Feb 2008 17:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 17:58:09 GMT]]></title><description><![CDATA[<p>1. Hat das was damit zu tun?<br />
2. Ist die Klasse clientclass nur da, um die klasse client zu verwalten, das heißt, es sieht in etwa so aus:</p>
<pre><code class="language-cpp">class clientclass
{
public:
class client
{
//alle möglichen fkt / ... von client
};
client * GetClientByUID (const user::ID&amp; _uid) const;
//client blabla entfernen usw.
std::vector &lt;client *&gt; Clients;
};

clientclass MyGlobalClientClassToTreatAllClients; //^^ nat. nenn ich meine Variablen nicht so ^^
</code></pre>
<p>Oder hab ich da nen Denkfehler? Oo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457698</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 Feb 2008 17:58:09 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:04:27 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>1. Hat das was damit zu tun?</p>
</blockquote>
<p>(D)Evil ist wohl nur ein Flüchtigkeitsfehler passiert. IdR schreibt man deine <code>public: class X</code> nämlich in zwei Zeilen.</p>
<p>Andererseits ist es ein bisschen seltsam, dass du eine Klasse <code>clientclass</code> nennst, die einzelne <code>clients</code> produziert. Sieht eher ein bisschen nach einer <code>clientfactory</code> oder ein <code>clientmanager</code> aus. und <code>client</code> muss auch nicht unbedingt eine Subklasse sein.</p>
<p>Zu deinem Problem: Wo ist user::GELD definiert? Und in welchem <code>namespace</code> liegt <code>GetPreisStringFromInt</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457707</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:04:27 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:07:20 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>irgend ne *.hpp:</p>
<pre><code class="language-cpp">//ifndef / define
//benötigte system-includes (string / vector / ....)
#include &quot;clients.hpp&quot; //namespace user

//fkt werden definiert...
std::string GetPreisStringFromInt (const user::GELD &amp;v); //Compiler-FEHLER -&gt; user ist kein namespace -.-

//endif
</code></pre>
</blockquote>
<p>Oh, jetzt passiert mir auch noch so ein Fehler. Das ist der Inhalt einer Header-Datei? In Headern solltest du keine Funktionen definieren.</p>
<p>Zyklisches Einbinden von Headern sollte - wenn du Include-Guards verwendest - kein Problem darstellen. Nur: Warum brauchst du in clients.hpp den Code aus dem anderen Header?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457714</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:14:12 GMT]]></title><description><![CDATA[<p>ja - clientmanager würde vll eher hinkommen ^^<br />
ich weiß, dass client keine subklasse sein muss, aber ich fand (und finde) es so eigtl schöner ^^<br />
user::GELD:<br />
clients.hpp:</p>
<pre><code class="language-cpp">//ifndef + define
//systemincludes
//restliche includes

namespace user
{
	typedef unsigned __int16 GELD;
//....etc
</code></pre>
<p>&quot;Und in welchem namespace liegt GetPreisStringFromInt?&quot;<br />
Vorerst im globalen...</p>
<p>//edit:</p>
<p>&quot;Das ist der Inhalt einer Header-Datei?&quot; Ja<br />
&quot;In Headern solltest du keine Funktionen definieren.&quot; Ich habe sie nur deklariert - definiert ist sie in der *.cpp</p>
<p>&quot;Zyklisches Einbinden von Headern sollte - wenn du Include-Guards verwendest - kein Problem darstellen.&quot; Gut</p>
<p>&quot;Nur: Warum brauchst du in clients.hpp den Code aus dem anderen Header?&quot;<br />
Nein - ich brauch eine andere, eine '*2.hpp' in der 'clients.hpp' - die braucht die '*.hpp' (weil dort auch IntToString und StringToInt-Fkt drin sind) - deshalb dieses zyklische Einbinden, was ja aber (wie bereits festgestellt) kein Problem darstellen sollte?</p>
<p>Danke schon mal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457715</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:14:12 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:14:15 GMT]]></title><description><![CDATA[<p>OK, clientclass und client haben jetzt aber nicht wirklich was mit deinem Problem zu tun, oder?</p>
<p>Mal zusammengefasst.</p>
<pre><code class="language-cpp">//sock.hpp
#ifndef SOCK_HPP
#define SOCK_HPP
#include &quot;clients.hpp&quot;

std::string GetPreisStringFromInt (const user::GELD &amp;v);

#endif //SOCK_HPP

//clients.hpp
#ifndef CLIENTS_HPP
#define CLIENTS_HPP
#include &quot;sock.hpp

namespace user { typedef x GELD; }

#endif //CLIENTS_HPP
</code></pre>
<p>Jetzt kommt's natürlich darauf an, was du zuerst einbindest. Wenn du clients.hpp einbindest, dann wird zunächst sock.hpp eingebunden, in sock.hpp wird clients.hpp aber nicht eingebunden, weil CLIENTS_HPP schon definiert ist. D.h. in sock.hpp ist der <code>namespace</code> user nicht dabei.<br />
Wenn du aber zuerst sock.hpp einbindest, dann wird über sock.hpp zuerst client.hpp eingebunden, der <code>namespace</code> und die Definitionen sind da und du hast kein Problem, außer du verwendest in clients.hpp Definitionen aus sock.hpp.</p>
<p>Alles klar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457719</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:17:20 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Nein - ich brauch eine andere, eine '*2.hpp' in der 'clients.hpp' - die braucht die '*.hpp' (weil dort auch IntToString und StringToInt-Fkt drin sind) - deshalb dieses zyklische Einbinden, was ja aber (wie bereits festgestellt) kein Problem darstellen sollte?</p>
</blockquote>
<p>Nur: Warum brauchst du diese Funktionsdefinitionen in clients.hpp?<br />
Die Funktionsdeklarationen wirst du doch wohl eher in einer *.cpp-Datei brauchen, wo du sie auch aufrufst. (Oder anders gesagt: Wieso brauchst du Funktionsdeklarationen in einem Header, wenn du diese Funktionen - hoffentlich - nicht verwendest?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457721</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:17:20 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:19:50 GMT]]></title><description><![CDATA[<p>Ach verdammt - ich dachte, die Reihenfolge wäre jz egal - da hätt ich es ja auch so lassen können, wie davor - aber da musste ich eben immer überlegen, wo ich die datei jetzt genau includiere -.-</p>
<p>Gibts ne Alternative zum 'Nach-Reihenfolge-Includieren'?</p>
<p>//edit:<br />
Du includierst also sobald das möglich ist in der *.cpp und nicht in der *.hpp?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457723</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:24:05 GMT]]></title><description><![CDATA[<p>Inkludiere da, wo du bestimmte Definitionen brauchst. Wenn du in einer Header-Datei z.B. eine Klasse von einer anderen Klasse aus einem anderen Header ableitest, bei Komposition, wasimmer.</p>
<p>Funktionsdefinitionen wirst du in einer Header-Datei nur selten brauchen (wenn du inline-Funktionen definierst z.B.) - aber andererseits hindert dich auch niemand daran, Funktionen mehrfach zu deklarieren (wenn du eine bestimmte Funktion wo brauchst und nicht gleich einen ganzen Header einbinden willst)</p>
<p>Alles zusammenführen solltest du erst bei der Implementierung. Das reduziert auch die Abhängigkeiten der Header untereinander.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457728</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to namespaces on Sun, 17 Feb 2008 18:27:22 GMT]]></title><description><![CDATA[<p>ja - aber den Aufwand bei Änderungen (jz wäre es meist nur ein typedef und dann wär es überall, wo ich die fkt deklariert habe) - aber ist allemal besser, als nichts compiliert zu bekommen ^^<br />
Also danke : &gt;</p>
<p>Byebye</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457729</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:27:22 GMT</pubDate></item></channel></rss>