<?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[using in der .cpp und .h?]]></title><description><![CDATA[<p>Servus,</p>
<p>ich hatte schon mehrfach das Problem, dass ich mit der Auflösung der using-Direktive nicht klargekommen bin. Beispiel:</p>
<p>foo.h</p>
<pre><code>#ifndef _FOO_H_
#define _FOO_H_

class foo
{
public:
    void bar (string str) {}
};

#endif
</code></pre>
<p>foo.cpp</p>
<pre><code>#include &lt;string&gt;

using std::string;

#include &quot;foo.h&quot;
</code></pre>
<p>main.cpp</p>
<pre><code>#include &lt;string&gt;

using std::string;

#include &quot;foo.h&quot;
</code></pre>
<p>So, der Compiler (VC++ 2005 Express) bemängelt bei mir:</p>
<blockquote>
<p>c:\foo.h(7) : error C2061: Syntaxfehler: Bezeichner 'string'</p>
</blockquote>
<p>Wenn ich den strin-include und die using-Direktive auch in die foo.h schreibe, geht alles klar. Kann aber wohl nicht mein Ernst sein, oder? Muss ich das machen, oder gibts ne elegante Möglichkeit?</p>
<p>Danke für Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153965/using-in-der-cpp-und-h</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 21:32:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153965.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Jul 2006 17:50:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to using in der .cpp und .h? on Sat, 22 Jul 2006 17:50:34 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich hatte schon mehrfach das Problem, dass ich mit der Auflösung der using-Direktive nicht klargekommen bin. Beispiel:</p>
<p>foo.h</p>
<pre><code>#ifndef _FOO_H_
#define _FOO_H_

class foo
{
public:
    void bar (string str) {}
};

#endif
</code></pre>
<p>foo.cpp</p>
<pre><code>#include &lt;string&gt;

using std::string;

#include &quot;foo.h&quot;
</code></pre>
<p>main.cpp</p>
<pre><code>#include &lt;string&gt;

using std::string;

#include &quot;foo.h&quot;
</code></pre>
<p>So, der Compiler (VC++ 2005 Express) bemängelt bei mir:</p>
<blockquote>
<p>c:\foo.h(7) : error C2061: Syntaxfehler: Bezeichner 'string'</p>
</blockquote>
<p>Wenn ich den strin-include und die using-Direktive auch in die foo.h schreibe, geht alles klar. Kann aber wohl nicht mein Ernst sein, oder? Muss ich das machen, oder gibts ne elegante Möglichkeit?</p>
<p>Danke für Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102322</guid><dc:creator><![CDATA[N00Bie]]></dc:creator><pubDate>Sat, 22 Jul 2006 17:50:34 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Sat, 22 Jul 2006 17:54:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>in Header-Dateien sollte man wirklich auf using verzichten, das bringt sonst u.U. Namensraumkonflikte mit sich. Dein Beispiel muss demnach so aussehen:</p>
<pre><code class="language-cpp">//foo.h
//KEINE Unterstrich vor Bezeichnern, die werden normal vom Compiler benutzt, könnte Ärger geben. 
#ifndef FOO_H
#define FOO_H

#include &lt;string&gt;

class foo
{
public:
    void bar (std::string str) {}
};

#endif
</code></pre>
<pre><code class="language-cpp">//foo.cpp
#include &quot;foo.h&quot;

using std::string;

void foo::bar(string str) { }
</code></pre>
<pre><code class="language-cpp">//main.cpp
#include &quot;foo.h&quot;

foo f;
string s;
f.bar(s);
</code></pre>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102325</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Sat, 22 Jul 2006 17:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Sat, 22 Jul 2006 17:56:47 GMT]]></title><description><![CDATA[<p>Dir bleibt nur std::string im Header, bitte NIEMALS using in Headern verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102326</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Sat, 22 Jul 2006 17:56:47 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Sat, 22 Jul 2006 18:04:28 GMT]]></title><description><![CDATA[<p>N00Bie schrieb:</p>
<blockquote>
<p>So, der Compiler (VC++ 2005 Express) bemängelt bei mir:</p>
<blockquote>
<p>c:\foo.h(7) : error C2061: Syntaxfehler: Bezeichner 'string'</p>
</blockquote>
</blockquote>
<p>bei mir funktioniert das problemlos. der fehler ist nicht im geposteten code zu suchen. im übrigen handelt es sich hier um eine using-deklaration und nicht um eine using-direktive. letztere sollte auf namespace-ebene in headern auf jeden fall vermieden werden. gegen die verwendung von using an sich ist auch in headern nichts einzuwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102329</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 22 Jul 2006 18:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Sat, 22 Jul 2006 18:46:24 GMT]]></title><description><![CDATA[<p>hmm, habs nach GPC umgestellt. Funktioniert jetzt.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102348</guid><dc:creator><![CDATA[N00Bie]]></dc:creator><pubDate>Sat, 22 Jul 2006 18:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Mon, 24 Jul 2006 08:53:58 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>gegen die verwendung von using an sich ist auch in headern nichts einzuwenden.</p>
</blockquote>
<p>Was meinst du damit? <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>Jedes namespace-level using (egal ob Deklaration oder Direktive) ist in Headern problematisch (wobei using-Deklarationen meist noch problematischer als using-Direktiven sind, da using-Deklarationen auch noch eine Reihenfolgeabhängigkeit besitzen). Einzig class-level using-Deklaration sind in Headern unproblematisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102962</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Mon, 24 Jul 2006 08:53:58 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Mon, 24 Jul 2006 09:57:00 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>gegen die verwendung von using an sich ist auch in headern nichts einzuwenden.</p>
</blockquote>
<p>Was meinst du damit? <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>Jedes namespace-level using (egal ob Deklaration oder Direktive) ist in Headern problematisch (wobei using-Deklarationen meist noch problematischer als using-Direktiven sind, da using-Deklarationen auch noch eine Reihenfolgeabhängigkeit besitzen). Einzig class-level using-Deklaration sind in Headern unproblematisch.</p>
</blockquote>
<p>was genau ist z.b. an einer deklaration</p>
<pre><code class="language-cpp">using std::string;
</code></pre>
<p>im globalen namensraum in einem header problematisch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103007</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 24 Jul 2006 09:57:00 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Mon, 24 Jul 2006 10:04:58 GMT]]></title><description><![CDATA[<p>Es gibt durchaus die Möglichkeit, dass jemand den Namen string im globalen Namensraum in einer Implementierungsdatei verwenden möchte. Damit, dass du den Namen vorher einführst nimmst du ihm diese Möglichkeit und sorgst dafür, dass er komische Compilerfehler bekommt, die kaum direkt daraus hervorgehen, dass er deinen Header benutzt.<br />
usings im globalen Namensraum in Headern sind unschön, vor allem wenn es derartig allgemeine Namen sind wie string. Wenn das in einem Namespace liegt und dokumentiert ist, ist das etwas anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103016</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 24 Jul 2006 10:04:58 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Mon, 24 Jul 2006 10:27:36 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Es gibt durchaus die Möglichkeit, dass jemand den Namen string im globalen Namensraum in einer Implementierungsdatei verwenden möchte. Damit, dass du den Namen vorher einführst nimmst du ihm diese Möglichkeit und sorgst dafür, dass er komische Compilerfehler bekommt, die kaum direkt daraus hervorgehen, dass er deinen Header benutzt.<br />
usings im globalen Namensraum in Headern sind unschön, vor allem wenn es derartig allgemeine Namen sind wie string. Wenn das in einem Namespace liegt und dokumentiert ist, ist das etwas anderes.</p>
</blockquote>
<p>das überzeugt nicht. es ist ja nicht so, dasss dieses using unbedingt nur der bequemlichkeit dienen muss (aus reiner bequemlichkeit benutze ich using eigentlich nur in funktionen). deine argumentation läuft darauf hinaus, dass man keinen naman in headern deklarieren sollte, weil derselbe name vielleicht noch woanders benutzt werden soll. alternativ könnte ich ja auch schreiben:</p>
<pre><code class="language-cpp">typedef std::string string;
</code></pre>
<p>der effekt ist absolut identisch zum using. im übrigen kenne ich auch die erklärung, wie sie in &quot;C++ Coding Standards: 101 Rules, Guidelines, and Best Practices&quot; gegeben wird. die bezieht sich aber auf funktionen - und ich stimme zu, dass hier vorsicht walten sollte. das kann aber kaum dazu dienen <em>alle</em> using deklarationen in headern als zu gefährlich zu erklären.</p>
<p>edit: gerade weil string kein exotischer bezeichner ist, halte ich es problematisch, ihn für irgendetwas anderes als std::string einzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103021</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 24 Jul 2006 10:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Mon, 24 Jul 2006 10:55:54 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>das überzeugt nicht. es ist ja nicht so, dasss dieses using unbedingt nur der bequemlichkeit dienen muss (aus reiner bequemlichkeit benutze ich using eigentlich nur in funktionen). deine argumentation läuft darauf hinaus, dass man keinen naman in headern deklarieren sollte, weil derselbe name vielleicht noch woanders benutzt werden soll.</p>
</blockquote>
<p>Nein. Es geht nur darum, dass man den globalen Namensraum nicht verschmutzen soll, der wird schließlich vielerorts verwendet. Dafür wurden Namespaces schließlich eingeführt. Wenn ein Bezeichner sinnvoll in einen Namensraum eingeführt wird ist das using sehr praktisch und eindeutiger als ein typedef (und es funktioniert auch bei Objekten), aber der globale Namensraum ist eigentlich nur der Implementierung vorbehalten. Klar, string sollte man vielleicht nicht unbedingt verwenden, aber denke mal an allgemeinere Sachen wie copy oder sort. Die könnten in einer Implementierung durchaus benutzt werden und es reicht eine ungünstige Typkonstellation und der Anwender bekommt die tollen STL-Fehlermeldungen um die Ohren geworfen, obwohl er deren Header nie explizit inkludiert hat.</p>
<p>camper schrieb:</p>
<blockquote>
<p>im übrigen kenne ich auch die erklärung, wie sie in &quot;C++ Coding Standards: 101 Rules, Guidelines, and Best Practices&quot; gegeben wird.</p>
</blockquote>
<p>Und wie lautet die?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103043</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 24 Jul 2006 10:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to using in der .cpp und .h? on Tue, 25 Jul 2006 09:28:17 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>im übrigen kenne ich auch die erklärung, wie sie in &quot;C++ Coding Standards: 101 Rules, Guidelines, and Best Practices&quot; gegeben wird. die bezieht sich aber auf funktionen</p>
</blockquote>
<p>Wie kommst du darauf, dass die sich nur auf Funktionen bezieht? Das Beispiel verwendet Funktionen, das heiß aber doch nicht, dass die Regel nur Funktionen gilt. Die Regel bezieht sich eindeutig auf alle Namespace-Level usings.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103648</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 25 Jul 2006 09:28:17 GMT</pubDate></item></channel></rss>