<?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[Template Classes - Function definition in seperate file]]></title><description><![CDATA[<p>Moinsen!</p>
<p>Ich habe gerade gelernt, wie man class templates verwenden kann. Um mir das ganze nun einzuprägen bin ich gerade etwas am experimentieren. Dabei bin ich auf ein Problem gestossen.</p>
<p>Ich habe folgenden Code:</p>
<pre><code class="language-cpp">// template_inheritance_0.cpp

#ifndef TEMPLATE_INHERITANCE_0
#define TEMPLATE_INHERITANCE_0

#include &lt;iostream&gt;
#include &lt;string&gt;

template &lt;typename Type&gt;
class Shape3D  //abstract base class
{
private:
	std::string name;

public:

	Shape3D(std::string name) {this-&gt;name = name;}
	virtual ~Shape3D() = 0;

	virtual Type surface() = 0;
	virtual Type volume() = 0;

	std::string get_name() {return name;}
};

template &lt;typename T&gt;
class Sphere3D : public Shape3D&lt;T&gt;
{
private:
	T radius;

public:

	Sphere3D(T rad = 0, std::string name = &quot;Sphere3D&quot;) : Shape3D(name)
	{
		radius = rad;
	}

	~Sphere3D() {}

	T surface();	// function prototype
	T volume();		// function prototype
};

#endif
</code></pre>
<p>Ich habe nun versucht die beiden functions surface() und volume() in einem seperaten file zu implementieren, so dass in der Klasse Sphere3D selber nur die prototypes vorhanden sind.</p>
<p>Wie müsste so ein seperates file aussehen? Ich habe es auf viele verschiedene Arten versucht, habe es aber nicht geschafft.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/258274/template-classes-function-definition-in-seperate-file</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 10:35:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258274.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 Jan 2010 16:00:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 16:00:59 GMT]]></title><description><![CDATA[<p>Moinsen!</p>
<p>Ich habe gerade gelernt, wie man class templates verwenden kann. Um mir das ganze nun einzuprägen bin ich gerade etwas am experimentieren. Dabei bin ich auf ein Problem gestossen.</p>
<p>Ich habe folgenden Code:</p>
<pre><code class="language-cpp">// template_inheritance_0.cpp

#ifndef TEMPLATE_INHERITANCE_0
#define TEMPLATE_INHERITANCE_0

#include &lt;iostream&gt;
#include &lt;string&gt;

template &lt;typename Type&gt;
class Shape3D  //abstract base class
{
private:
	std::string name;

public:

	Shape3D(std::string name) {this-&gt;name = name;}
	virtual ~Shape3D() = 0;

	virtual Type surface() = 0;
	virtual Type volume() = 0;

	std::string get_name() {return name;}
};

template &lt;typename T&gt;
class Sphere3D : public Shape3D&lt;T&gt;
{
private:
	T radius;

public:

	Sphere3D(T rad = 0, std::string name = &quot;Sphere3D&quot;) : Shape3D(name)
	{
		radius = rad;
	}

	~Sphere3D() {}

	T surface();	// function prototype
	T volume();		// function prototype
};

#endif
</code></pre>
<p>Ich habe nun versucht die beiden functions surface() und volume() in einem seperaten file zu implementieren, so dass in der Klasse Sphere3D selber nur die prototypes vorhanden sind.</p>
<p>Wie müsste so ein seperates file aussehen? Ich habe es auf viele verschiedene Arten versucht, habe es aber nicht geschafft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835100</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 08 Jan 2010 16:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 16:08:05 GMT]]></title><description><![CDATA[<p>Bei teamplates kannst du keine Auslagerung in die .cpp machen.<br />
Du musst alles im Header definieren. (Du kannst natürilch ein seperates File machen, dass z.B .imp nennen und dann am Ende des Headers includen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835106</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 08 Jan 2010 16:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 16:24:29 GMT]]></title><description><![CDATA[<p>Genau das hatte ich vor.</p>
<p>Mir ist allerdings unklar wie die Syntax aussehen muss in dem seperaten header-file.</p>
<p>Mein seperates header-file sieht so aus:</p>
<pre><code class="language-cpp">// sphere3d.inl

template &lt;typename T&gt;
T Sphere3D::surface() {return radius * 10;}

template &lt;typename T&gt;
T Sphere3D::volume()	{return radius / 10;}
</code></pre>
<p>Das scheint aber falsch zu sein. Könntest du mir bitte den Code für eine der beiden Methoden geben? Ich hänge da gerade etwas fest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835118</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 08 Jan 2010 16:24:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 16:28:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T&gt;
T Sphere3D&lt;T&gt;::surface() {return radius * 10;}

template &lt;typename T&gt;
T Sphere3D&lt;T&gt;::volume()    {return radius / 10;}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1835121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835121</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 08 Jan 2010 16:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 16:43:54 GMT]]></title><description><![CDATA[<p>Das ist merkwürdig... ich hatte den Code auch genau so und trotzdem hatte es nicht funktioniert.</p>
<p>Vielen Dank euch, jetzt weiss ich zumindest, dass das .inl-file korrekt ist. Dann muss ich wohl sonstwo noch Fehler suchen.</p>
<p>Danke euch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835135</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 08 Jan 2010 16:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 16:49:47 GMT]]></title><description><![CDATA[<p>Hast du den include im Header gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835138</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 08 Jan 2010 16:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 17:05:17 GMT]]></title><description><![CDATA[<p>Jop, hier die inlucdes:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

#include &quot;sphere3d.inl&quot;
</code></pre>
<p>*Edit<br />
Die Fehlermeldung:</p>
<blockquote>
<p>error C2653: 'Sphere3D' : is not a class or namespace name</p>
</blockquote>
<p>(Gibt noch ne zweite, die identisch ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835151</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 08 Jan 2010 17:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 17:31:50 GMT]]></title><description><![CDATA[<p>Den include musst du NACH der Klassenbeschreibung machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835174</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 08 Jan 2010 17:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Fri, 08 Jan 2010 17:39:48 GMT]]></title><description><![CDATA[<p>Ou, das habe ich ja ganz vergessen <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=":-/"
      alt="😕"
    /> Aber jetzt funktionierts <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>
<p>Danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835185</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 08 Jan 2010 17:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Sat, 09 Jan 2010 19:53:31 GMT]]></title><description><![CDATA[<p>Ich habe mir das ganze nochmal überlegt und mich gefragt wiso die #includes am Ende des files kommen müssen.</p>
<p>Ich habe mir das so erklärt, dass zuerst die Prototypen der Funktionen bekannt sein müssen, bevor die implementierte Funktion geladen wird.</p>
<p>Stimmt das so in etwa? Wie werden header-files eigentlich geladen? Durch die Laufzeitumgebung? Weil sie werden ja nicht kompiliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835897</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 09 Jan 2010 19:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Sat, 09 Jan 2010 20:15:31 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Ich habe mir das so erklärt, dass zuerst die Prototypen der Funktionen bekannt sein müssen, bevor die implementierte Funktion geladen wird.</p>
</blockquote>
<p>Nicht geladen, aber definiert.</p>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Weil sie werden ja nicht kompiliert.</p>
</blockquote>
<p>Doch, werden sie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835918</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 09 Jan 2010 20:15:31 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Sat, 09 Jan 2010 20:35:08 GMT]]></title><description><![CDATA[<p>Also stimmt meine Aussage, wenn man die richtigen Begriffe einsetzt? ^^</p>
<p>Ich dachte header-files werden nicht kompiliert, weil man bei der IDE Visual C++ nicht einzeln header-files kompilieren kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835934</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 09 Jan 2010 20:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Sat, 09 Jan 2010 20:57:19 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Ich dachte header-files werden nicht kompiliert, weil man bei der IDE Visual C++ nicht einzeln header-files kompilieren kann.</p>
</blockquote>
<p>Doch, sie werden auch kompiliert. Allerdings geschieht das indirekt, indem sie über die .cpp-Dateien inkludiert werden.</p>
<p>Vor dem eigentlichen Kompiliervorgang tut der Präprozessor sein Werk. Der löst unter anderem die Präprozessordirektiven ( <code>#include</code> , <code>#define</code> , <code>#ifdef</code> etc.) auf und ersetzt Makros. Bei <code>#include</code> wird gerade der gesamte Inhalt der angegebenen Headerdatei an die Stelle im Code gesetzt, wo die <code>#include</code> -Direktive steht. Wenn der Compiler beginnt, weiss er nichts mehr über Headerdateien, sondern kompiliert lediglich eine oder mehrere (vergrösserte) Implementierungsdateien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1835951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1835951</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 09 Jan 2010 20:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to Template Classes - Function definition in seperate file on Sun, 10 Jan 2010 08:54:05 GMT]]></title><description><![CDATA[<p>Achso, jetzt ist mir klar, warum header-files nicht einzeln kompiliert werden können.</p>
<p>Danke für die Info.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1836055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1836055</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 10 Jan 2010 08:54:05 GMT</pubDate></item></channel></rss>