<?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 &amp;quot;Undefined reference&amp;quot;]]></title><description><![CDATA[<p>Hallo zusammen,<br />
bin grad etwas verwirrt und zwar geht es um folgendes kleines Test-Template Programm. Der Sinn des Programms ist jetzt nicht relevant nur wie die Templates arbeiten.</p>
<p>Das hier funktioniert und mach alles wie ich es erwarte:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

//- Declare template class
template &lt;class BasicPsiThermo, class MixtureType&gt;
class psiRhoThermo
{
    public:

        //- constructor
        psiRhoThermo
        (
            BasicPsiThermo&amp;,
            MixtureType&amp;
        );

        //- destructor
        virtual ~psiRhoThermo();
};

//- Constructor
template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::psiRhoThermo
(
    BasicPsiThermo&amp; a,
    MixtureType&amp; b
)
{
    std::cout &lt;&lt; &quot;psiRhoThermo constructor a: &quot; &lt;&lt; a &lt;&lt; &quot; b: &quot; &lt;&lt; b &lt;&lt; std::endl;
}

//- Destructor
template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::~psiRhoThermo()
{}

//-
int main()
{
    //- Test stuff
    int a{1};
    std::string myStr = &quot;fooBar&quot;;

    psiRhoThermo&lt;int, std::string&gt; object(a,myStr);

    return 0;
}
</code></pre>
<p>So weit so gut. Splitte ich jetz die Klasse in eine Header und Source File, bekomm ich den Fehler das mein Konstruktor und Destruktor nicht definiert sind &quot;undefined reference to 'psiRhoThermo&lt;int, std::string&gt;::psiRhoThermo(int&amp;, std::string&amp;)'&quot;.</p>
<p>Das Programm sieht dnan wie folgt aus:</p>
<p>main.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;psiRhoThermo.H&quot;

int main()
{
    int a{1};
    std::string myStr = &quot;fooBar&quot;;

    psiRhoThermo&lt;int, std::string&gt; object(a,myStr);

    return 0;
}
</code></pre>
<p>psiRhoThermo.H</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

#ifndef HERHOTHERMO_H
#define HERHOTHERMO_H

template &lt;class BasicPsiThermo, class MixtureType&gt;
class psiRhoThermo
{
    public:
        psiRhoThermo
        (
            BasicPsiThermo&amp;,
            MixtureType&amp;
        );

        virtual ~psiRhoThermo();
};

#endif // HERHOTHERMO_H
</code></pre>
<p>psiRhoThermo.C</p>
<pre><code>#include &quot;psiRhoThermo.H&quot;

template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::psiRhoThermo
(
    BasicPsiThermo&amp; a,
    MixtureType&amp; b
)
{
    std::cout &lt;&lt; &quot;psiRhoThermo constructor a: &quot; &lt;&lt; a &lt;&lt; &quot; b: &quot; &lt;&lt; b &lt;&lt; std::endl;
}

template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::~psiRhoThermo()
{}
</code></pre>
<p>Um mir sicher zu sein das ich da keinen Fehler gemacht hab, hab ich die Templates alle mal rausgeworfen und nur die Klasse (also keine Template-Klasse) angegeben. Damit funktioniert alles - ist ja auch ziemlich langweilig (:</p>
<p>Ich denkt das ich bei den Templates irgendwas noch falsch mache. Die Definition findet irgendwie nicht statt, bzw weiß der Compiler nicht wirklich wie das Template definiert ist. Dachte das ich das schon in der *.C Datei erledigt hatte.</p>
<p>Wäre sehr dankbar um eine kleine Erklärung. Hackel da schon etwas länger. Vielleicht mach ich auch grundlegende Dinge falsch...</p>
<p>Viele Grüße<br />
Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329255/template-quot-undefined-reference-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 08:41:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329255.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Nov 2014 10:27:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Fri, 14 Nov 2014 10:30:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
bin grad etwas verwirrt und zwar geht es um folgendes kleines Test-Template Programm. Der Sinn des Programms ist jetzt nicht relevant nur wie die Templates arbeiten.</p>
<p>Das hier funktioniert und mach alles wie ich es erwarte:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

//- Declare template class
template &lt;class BasicPsiThermo, class MixtureType&gt;
class psiRhoThermo
{
    public:

        //- constructor
        psiRhoThermo
        (
            BasicPsiThermo&amp;,
            MixtureType&amp;
        );

        //- destructor
        virtual ~psiRhoThermo();
};

//- Constructor
template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::psiRhoThermo
(
    BasicPsiThermo&amp; a,
    MixtureType&amp; b
)
{
    std::cout &lt;&lt; &quot;psiRhoThermo constructor a: &quot; &lt;&lt; a &lt;&lt; &quot; b: &quot; &lt;&lt; b &lt;&lt; std::endl;
}

//- Destructor
template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::~psiRhoThermo()
{}

//-
int main()
{
    //- Test stuff
    int a{1};
    std::string myStr = &quot;fooBar&quot;;

    psiRhoThermo&lt;int, std::string&gt; object(a,myStr);

    return 0;
}
</code></pre>
<p>So weit so gut. Splitte ich jetz die Klasse in eine Header und Source File, bekomm ich den Fehler das mein Konstruktor und Destruktor nicht definiert sind &quot;undefined reference to 'psiRhoThermo&lt;int, std::string&gt;::psiRhoThermo(int&amp;, std::string&amp;)'&quot;.</p>
<p>Das Programm sieht dnan wie folgt aus:</p>
<p>main.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;psiRhoThermo.H&quot;

int main()
{
    int a{1};
    std::string myStr = &quot;fooBar&quot;;

    psiRhoThermo&lt;int, std::string&gt; object(a,myStr);

    return 0;
}
</code></pre>
<p>psiRhoThermo.H</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

#ifndef HERHOTHERMO_H
#define HERHOTHERMO_H

template &lt;class BasicPsiThermo, class MixtureType&gt;
class psiRhoThermo
{
    public:
        psiRhoThermo
        (
            BasicPsiThermo&amp;,
            MixtureType&amp;
        );

        virtual ~psiRhoThermo();
};

#endif // HERHOTHERMO_H
</code></pre>
<p>psiRhoThermo.C</p>
<pre><code>#include &quot;psiRhoThermo.H&quot;

template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::psiRhoThermo
(
    BasicPsiThermo&amp; a,
    MixtureType&amp; b
)
{
    std::cout &lt;&lt; &quot;psiRhoThermo constructor a: &quot; &lt;&lt; a &lt;&lt; &quot; b: &quot; &lt;&lt; b &lt;&lt; std::endl;
}

template &lt;class BasicPsiThermo, class MixtureType&gt;
psiRhoThermo&lt;BasicPsiThermo, MixtureType&gt;::~psiRhoThermo()
{}
</code></pre>
<p>Um mir sicher zu sein das ich da keinen Fehler gemacht hab, hab ich die Templates alle mal rausgeworfen und nur die Klasse (also keine Template-Klasse) angegeben. Damit funktioniert alles - ist ja auch ziemlich langweilig (:</p>
<p>Ich denkt das ich bei den Templates irgendwas noch falsch mache. Die Definition findet irgendwie nicht statt, bzw weiß der Compiler nicht wirklich wie das Template definiert ist. Dachte das ich das schon in der *.C Datei erledigt hatte.</p>
<p>Wäre sehr dankbar um eine kleine Erklärung. Hackel da schon etwas länger. Vielleicht mach ich auch grundlegende Dinge falsch...</p>
<p>Viele Grüße<br />
Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427595</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Fri, 14 Nov 2014 10:30:03 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Fri, 14 Nov 2014 10:40:41 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>hmmm einfach nur dumm...<br />
Nachdem ich den Beitrag verfasst hatte hab ich gleich die Antwort gefunden.<br />
<a href="http://stackoverflow.com/questions/8752837/undefined-reference-to-template-class-constructor" rel="nofollow">http://stackoverflow.com/questions/8752837/undefined-reference-to-template-class-constructor</a></p>
<p>Tschuldigt für die Thread Erstellung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427598</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Fri, 14 Nov 2014 10:40:41 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Fri, 14 Nov 2014 11:01:24 GMT]]></title><description><![CDATA[<p>Kann das bitte jmd. mal kurz zusammenfassen auf was man beim arbeiten mit Templates bzw Headerfiles beachten soll, bzw. wie man vorgehen soll? Mein Englisch ist jetzt nicht soo der Hit und der Stackoverflow Artikel etwas..naja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427600</guid><dc:creator><![CDATA[en_allemande]]></dc:creator><pubDate>Fri, 14 Nov 2014 11:01:24 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Fri, 14 Nov 2014 11:46:44 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/151578" rel="nofollow">Punkt 5.</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427605</guid><dc:creator><![CDATA[C Newbie]]></dc:creator><pubDate>Fri, 14 Nov 2014 11:46:44 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Fri, 14 Nov 2014 12:21:27 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich muss mich eigentlich schämen den gepinnten Thread zu übersehen. Danke für die Anmerkung. Wie ich gerade gesehen hab, sind in OpenFOAM alle Header Template Klassen am Ende mit folgendem versehen:</p>
<pre><code>#ifdef NoRepository
#include &quot;SourceTemplate.C&quot;
#endif
</code></pre>
<p>Das entspricht ja genau dem, das ich aus meinem Link und deinem Beitrag entnehmen konnte. Die Source-Dateien werden dann am Ende eingebunden. Folgende Frage stellt sich mir gerade. Für das oben genannte Konstrukt muss es ja irgendwo im Projekt eine Zeile geben, die das &quot;noRepository&quot; definiert:</p>
<pre><code>#define NoRepository
</code></pre>
<p>Sehe ich das richtig oder falsch? Wenn ich aber jetzt danach suche:</p>
<pre><code>grep -rn -e &quot;define NoReppository&quot; *
</code></pre>
<p>finde ich im ganzen Projekt allerdings kein einzigen Eintrag. Kann das sein?</p>
<p>Was mir gerade aufgefallen ist:<br />
Die Kompilierung weißt als Flag folgendes auf:</p>
<pre><code>-DNoRepository
</code></pre>
<p>Ist das etwas ähnliches?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427609</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Fri, 14 Nov 2014 12:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Fri, 14 Nov 2014 12:23:02 GMT]]></title><description><![CDATA[<p>Die Antwort:</p>
<p>-&gt; NoRepository wird als Flag dem Compiler zugewiesen und vordefiniert.<br />
Ich brauch ne mütze Schlaf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427611</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Fri, 14 Nov 2014 12:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Tue, 08 Dec 2015 13:20:35 GMT]]></title><description><![CDATA[<p>Danke Shor-ty für deine ausführlichen Beiträge hier, ich habe schon seit vielen Stunden nach deiner Lösung für dieses OpenFOAM-Compile-Problem gesucht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478676</guid><dc:creator><![CDATA[David_]]></dc:creator><pubDate>Tue, 08 Dec 2015 13:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Wed, 09 Dec 2015 06:49:26 GMT]]></title><description><![CDATA[<p>Na immer gerne (:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478778</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Wed, 09 Dec 2015 06:49:26 GMT</pubDate></item><item><title><![CDATA[Reply to Template &amp;quot;Undefined reference&amp;quot; on Wed, 09 Dec 2015 06:54:46 GMT]]></title><description><![CDATA[<p>Auch wenn es nett gemeint ist: Bitte keine uralten Threads pushen, besonders nicht, wenn man keinen fachlichen Beitrag zum Thread liefert. Für alle anderen Leser ist es nämlich nicht nett, wenn sie eine lange gelöste Fragestellung ganz oben im Forum finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478780</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Dec 2015 06:54:46 GMT</pubDate></item></channel></rss>