<?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[Linker: Einbinden einer Headerdatei in alle Klassen]]></title><description><![CDATA[<p>Halllo,</p>
<p>ich lege gerade eine neues Projekt an, das neben Klassen auch eine Headerdatei namens &quot;allgemein.h&quot; enthalten soll, damit ich dort klassenunabhängige Konvertierungsfunktionen etc. unterbringen kann.</p>
<p>Die sieht im Moment etwa so aus:</p>
<pre><code class="language-cpp">#pragma once
#ifndef _allgemein_h
#define _allgemein_h

#pragma warning( disable : 4705 )

#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;stdlib.h&gt;
#include &lt;math.h&gt;
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;list&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;

using namespace std;

ofstream logfile;

template&lt;class T&gt; string tos(const T&amp; aval, const int &amp; abreite=0)
{
  //...
}

//weitere Funktionen
#endif
</code></pre>
<p>Wenn ich diesen Header nun in der main und einer Klasse (in der cpp-Datei) einbinde, meckert der Linker, dass Objekte mehrfach definiert sind. Ich dachte, dieses Problem ließe sich mit Compilerdirektiven umgehen?</p>
<p>Also im Prinzip geht es um das generelle Problem, globale Funktionen oder Variablen für alle Klassen zugänglich zu machen.</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/128281/linker-einbinden-einer-headerdatei-in-alle-klassen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 13:47:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/128281.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Dec 2005 09:42:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 09:42:11 GMT]]></title><description><![CDATA[<p>Halllo,</p>
<p>ich lege gerade eine neues Projekt an, das neben Klassen auch eine Headerdatei namens &quot;allgemein.h&quot; enthalten soll, damit ich dort klassenunabhängige Konvertierungsfunktionen etc. unterbringen kann.</p>
<p>Die sieht im Moment etwa so aus:</p>
<pre><code class="language-cpp">#pragma once
#ifndef _allgemein_h
#define _allgemein_h

#pragma warning( disable : 4705 )

#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;stdlib.h&gt;
#include &lt;math.h&gt;
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;list&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;

using namespace std;

ofstream logfile;

template&lt;class T&gt; string tos(const T&amp; aval, const int &amp; abreite=0)
{
  //...
}

//weitere Funktionen
#endif
</code></pre>
<p>Wenn ich diesen Header nun in der main und einer Klasse (in der cpp-Datei) einbinde, meckert der Linker, dass Objekte mehrfach definiert sind. Ich dachte, dieses Problem ließe sich mit Compilerdirektiven umgehen?</p>
<p>Also im Prinzip geht es um das generelle Problem, globale Funktionen oder Variablen für alle Klassen zugänglich zu machen.</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932053</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Fri, 02 Dec 2005 09:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 10:02:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#pragma once 

#ifndef _allgemein_h 
#define _allgemein_h
</code></pre>
<p>Irgendwie doppel gemoppelt....</p>
<pre><code class="language-cpp">ofstream logfile;
</code></pre>
<p>Was meinst du wie oft diese Variable in deinem Projekt existiert, wenn du diese Zeile in jedem deiner Cpp-Dateien stehen hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932076</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 02 Dec 2005 10:02:05 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 10:14:37 GMT]]></title><description><![CDATA[<blockquote>
<p>C/C++ Code:<br />
#pragma once</p>
<p>#ifndef _allgemein_h<br />
#define _allgemein_h</p>
<p>Irgendwie doppel gemoppelt....</p>
</blockquote>
<p>Äh, OK, pardon, das pragma fügt das Visual Studio selbst ein. Ich bin eher die andere Variante gewohnt...</p>
<blockquote>
<p>C/C++ Code:<br />
ofstream logfile;</p>
<p>Was meinst du wie oft diese Variable in deinem Projekt existiert, wenn du diese Zeile in jedem deiner Cpp-Dateien stehen hast?</p>
</blockquote>
<p>Ja schon gut, aber irgendwie komm ich nicht dahinter, wie ich z.B. Konstanten oder eben ein Logfilestream so definiere, dass es überall zugänglich ist. Nehmen wir an, ich brauche die Konstante PI. Wohin schreibe ich mein</p>
<pre><code class="language-cpp">const double PI = 3.141
</code></pre>
<p>???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932088</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Fri, 02 Dec 2005 10:14:37 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 10:39:51 GMT]]></title><description><![CDATA[<p>Da wir uns in C++ befinden würde ich Klassenvariablen verwenden:</p>
<p>h:</p>
<pre><code class="language-cpp">class Math
{
    const static double sm_Pi;
};
</code></pre>
<p>cpp:</p>
<pre><code class="language-cpp">double Math::sm_Pi = 3.14;
</code></pre>
<p>Dann schweben die Variablen nicht so frei im Raum... und dein Logstream gehört doch zu einer Log-Klasse/Schnittstelle oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/932108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932108</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 02 Dec 2005 10:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 10:50:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Konstanten kannst du problemlos in Headern definieren. Variablen wie logfile dürfen hier allerdings nur deklariert, nicht aber definiert werden. Die einzige Definition kommt dann in eine cpp-Datei.</p>
<pre><code class="language-cpp">// allgemein.h
#include &lt;fstream&gt;

extern ofstream logfile; // Deklaration

// allgemein.cpp
#include &quot;allgemein.h&quot;

ofstream logfile;       // Definition
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/932118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932118</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 02 Dec 2005 10:50:52 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 11:24:28 GMT]]></title><description><![CDATA[<p>Solange die Konstanten von einem elementaren Typ sind. Ansonsten könnte es auch schon mal schiefgehen (z.B. in VC++ 6 innerhalb von Klassen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932149</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 02 Dec 2005 11:24:28 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 11:27:49 GMT]]></title><description><![CDATA[<p>Ja, mit extern klappt´s.</p>
<p>Was allerdings nicht klappt, sind Templatefunktionen. Da bekomme ich nichtaufgelöste externe Verweise.</p>
<p>also:</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;allgemein.h&quot;

int main(int argc, char* argv[])
{
tausche(a,b);
return 0;
}
</code></pre>
<p>allgemein.h</p>
<pre><code class="language-cpp">#ifndef _allgemein_h
#def _allgemein_h
template&lt;class T&gt; void tausche( T &amp;left, T &amp;right);
#endif
</code></pre>
<p>allgemein.cpp</p>
<pre><code class="language-cpp">template&lt;class T&gt; void tausche( T &amp;left, T &amp;right)
{
    T temp;
    temp = left;
    left = right;
    right = temp;
}
</code></pre>
<p>Mit anderen Funktionen geht es!<br />
War das nicht irgendwie immer so, dass man auch bei Templateklassen nur die Headerdatei hat und keine cpp <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>
]]></description><link>https://www.c-plusplus.net/forum/post/932155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932155</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Fri, 02 Dec 2005 11:27:49 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 11:32:51 GMT]]></title><description><![CDATA[<p>KeineAhnung78 schrieb:</p>
<blockquote>
<p>Mit anderen Funktionen geht es!<br />
War das nicht irgendwie immer so, dass man auch bei Templateklassen nur die Headerdatei hat und keine cpp <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>
</blockquote>
<p>Wieso &quot;AUCH&quot; bei Templateklassen? Gerade bei Templateklassen, ja!</p>
<p>Der Grund ist dass es eben ein Template ist. Also eine Vorlage, aus der erst bei Benutzung (oder expliziter Instanziierung) Code wird. Woher soll der Compiler beim Compilieren von (z.B.) a.cpp wissen wie das Template definiert ist wenn es statt im Header in (z.B.) b.cpp steht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/932162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932162</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 02 Dec 2005 11:32:51 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 11:34:34 GMT]]></title><description><![CDATA[<p>Du kannst keine Templates exportieren. Du kannst ausgeprägte Templates exportieren (mußt sie also bereits in der Dll irgendwo verwendet haben) oder aber du prägst die Templates einfach in jeder Bibliothek in der du sie brauchst neu aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932166</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 02 Dec 2005 11:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Linker: Einbinden einer Headerdatei in alle Klassen on Fri, 02 Dec 2005 11:36:34 GMT]]></title><description><![CDATA[<p>OK, hab´s kapiert. Mal sehen, wo das nächste Problem auftaucht... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/932170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932170</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Fri, 02 Dec 2005 11:36:34 GMT</pubDate></item></channel></rss>