<?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[undefined reference to... das alte Problem.]]></title><description><![CDATA[<p>Hallo alle mit einander :D,</p>
<p>momentan schreibe ich aus lernzwecken eine etwas größere lib.<br />
Nun habe ich die Tage versucht das geschriebene auch mal auszuprobiere,<br />
doch was mir der gcc nur ausspuckt ist folgendes:</p>
<blockquote>
<p>NetBeansProjects/Lanthal/main.cpp:23: undefined reference to `Lanthal::Core::Patterns::Singleton<a href="Lanthal::Core::Logger" rel="nofollow">Lanthal::Core::Logger</a>::GetInstance()'</p>
<p>NetBeansProjects/Core/include/Logger.cpp:34: undefined reference to `Lanthal::Core::Patterns::Singleton<a href="Lanthal::Core::Logger" rel="nofollow">Lanthal::Core::Logger</a>::Singleton()'</p>
<p>NetBeansProjects/Core/include/Logger.cpp:34: undefined reference to `Lanthal::Core::Patterns::Singleton<a href="Lanthal::Core::Logger" rel="nofollow">Lanthal::Core::Logger</a>::Singleton()'</p>
</blockquote>
<p>Erster gedanke war das ich depp vergessen hab die memberfunktion zu<br />
schreiben. Aber die waren schon längst definiert.</p>
<p>Dann dacht ich ich habe vergessen die die Lib zu linken. Ist aber auch nicht der fall. Die Lib war schon gelinkt.</p>
<p>Mir fällt zum verrecken nicht ein was ich dagegen machen könnt.</p>
<p>So mal etwas zum code:<br />
Verwendet habe ich eine Singleton klasse auf Basis von Templates</p>
<pre><code class="language-cpp">namespace Lanthal
{
    namespace Core
    {
        namespace Patterns
        {
           template &lt;typename type&gt;
           class Singleton
           { 
              private:

                 static type*          m_instance;

                 Singleton( const Singleton&amp; );
                 Singleton&amp; operator=( const Singleton&amp; );   

              protected:
                 Singleton();

             public:
                 static type&amp; GetInstance();
           };
        }
    }
</code></pre>
<p>sowie einen kleinen Logger:</p>
<pre><code class="language-cpp">#include &quot;patterns/Singleton.h&quot;
#include &lt;string&gt;
#include &quot;Filehandling/File.h&quot;

namespace Lanthal
{
    namespace Core
    {
        class Logger : public Patterns::Singleton&lt;Logger&gt;
        {
        private:

            std::string                 m_Logbuffer;
            File_Handling::File         *m_Logfile;

            Logger();

        protected:
        public:

          ~Logger();

            friend class Patterns::Singleton&lt;Logger&gt;;

            Logger&amp; operator&lt;&lt;(const std::string&amp;);

        };
    }
}
</code></pre>
<p>Ich selber finde leider den Fehler im Code selbst nicht. Kann es sein das ich etwas übersehen habe? Bin sehr dankbar über jeden Einfall den ihr habt der zur lösung führt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303614/undefined-reference-to-das-alte-problem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 07:23:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303614.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 May 2012 13:03:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to undefined reference to... das alte Problem. on Fri, 18 May 2012 13:03:16 GMT]]></title><description><![CDATA[<p>Hallo alle mit einander :D,</p>
<p>momentan schreibe ich aus lernzwecken eine etwas größere lib.<br />
Nun habe ich die Tage versucht das geschriebene auch mal auszuprobiere,<br />
doch was mir der gcc nur ausspuckt ist folgendes:</p>
<blockquote>
<p>NetBeansProjects/Lanthal/main.cpp:23: undefined reference to `Lanthal::Core::Patterns::Singleton<a href="Lanthal::Core::Logger" rel="nofollow">Lanthal::Core::Logger</a>::GetInstance()'</p>
<p>NetBeansProjects/Core/include/Logger.cpp:34: undefined reference to `Lanthal::Core::Patterns::Singleton<a href="Lanthal::Core::Logger" rel="nofollow">Lanthal::Core::Logger</a>::Singleton()'</p>
<p>NetBeansProjects/Core/include/Logger.cpp:34: undefined reference to `Lanthal::Core::Patterns::Singleton<a href="Lanthal::Core::Logger" rel="nofollow">Lanthal::Core::Logger</a>::Singleton()'</p>
</blockquote>
<p>Erster gedanke war das ich depp vergessen hab die memberfunktion zu<br />
schreiben. Aber die waren schon längst definiert.</p>
<p>Dann dacht ich ich habe vergessen die die Lib zu linken. Ist aber auch nicht der fall. Die Lib war schon gelinkt.</p>
<p>Mir fällt zum verrecken nicht ein was ich dagegen machen könnt.</p>
<p>So mal etwas zum code:<br />
Verwendet habe ich eine Singleton klasse auf Basis von Templates</p>
<pre><code class="language-cpp">namespace Lanthal
{
    namespace Core
    {
        namespace Patterns
        {
           template &lt;typename type&gt;
           class Singleton
           { 
              private:

                 static type*          m_instance;

                 Singleton( const Singleton&amp; );
                 Singleton&amp; operator=( const Singleton&amp; );   

              protected:
                 Singleton();

             public:
                 static type&amp; GetInstance();
           };
        }
    }
</code></pre>
<p>sowie einen kleinen Logger:</p>
<pre><code class="language-cpp">#include &quot;patterns/Singleton.h&quot;
#include &lt;string&gt;
#include &quot;Filehandling/File.h&quot;

namespace Lanthal
{
    namespace Core
    {
        class Logger : public Patterns::Singleton&lt;Logger&gt;
        {
        private:

            std::string                 m_Logbuffer;
            File_Handling::File         *m_Logfile;

            Logger();

        protected:
        public:

          ~Logger();

            friend class Patterns::Singleton&lt;Logger&gt;;

            Logger&amp; operator&lt;&lt;(const std::string&amp;);

        };
    }
}
</code></pre>
<p>Ich selber finde leider den Fehler im Code selbst nicht. Kann es sein das ich etwas übersehen habe? Bin sehr dankbar über jeden Einfall den ihr habt der zur lösung führt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212813</guid><dc:creator><![CDATA[exOfde]]></dc:creator><pubDate>Fri, 18 May 2012 13:03:16 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference to... das alte Problem. on Fri, 18 May 2012 13:57:26 GMT]]></title><description><![CDATA[<p>templates in Codedatei statt im Header definiert? Linkreihenfolge falsch? Es gibt lauter wahrscheinliche und unwahrscheinliche Gründe für diesen Fehler. Ohne mehr Informationen kann man nichts genaueres sagen<sup>*</sup>.</p>
<p>Dies ist übrigens nicht gerade eine Linux/Unix-Programmierungsfrage, sondern eher für das Standard-C++-Forum.</p>
<p><sup>*</sup>: Prüf aber mal trotzdem meine beiden Vorschläge. Erfahrungsgemäß sind das die häufigsten Ursachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212833</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 18 May 2012 13:57:26 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference to... das alte Problem. on Fri, 18 May 2012 15:01:09 GMT]]></title><description><![CDATA[<p>Wo hast Du die 2 bemängelten Funktionen denn definiert? Ich sehe in Deinen Codeausschnitten nur die Deklaration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212857</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 18 May 2012 15:01:09 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference to... das alte Problem. on Fri, 18 May 2012 16:01:04 GMT]]></title><description><![CDATA[<p>Da hast du nicht ganz unrecht, habs zuspät gesehen das ich das hier unter linux/unix gepostet hab.<br />
In der Source-datei so wie man es normalerweise oft auch tut.<br />
Hab die Linkreihenfolge geprüft und testweise geändert, keiner änderung.</p>
<p>Die templates habe ich im Header-deklariert...und in einer Source definiert. Das ich das net selber sah, ist schon arg traurig. Hab die Definition nun in eine Template-Header gesteckt.</p>
<p>Die erste Fehlermeldung hab ich damit weg bekommen.</p>
<p>So dann auch hier mal die Source-datei<br />
Logger.cpp:</p>
<pre><code class="language-cpp">#include &quot;Logger.h&quot;

namespace Lanthal
{
    namespace Core
    {
        Logger::Logger() : Singleton()  //&lt;- Hier kommt der Fehler
        {
            this-&gt;m_Logfile = new File_Handling::File(&quot;logs/protocoll.txt&quot;);
        }

        Logger::~Logger()
        {
            //this-&gt;m_Logfile-&gt;~File();
        }

        Logger&amp; Logger::operator &lt;&lt;(const std::string&amp; msg)
        {
            this-&gt;m_Logfile-&gt;Write(const_cast&lt;char*&gt;(msg.c_str()),msg.size());
            return *this;
        }

    }
}
</code></pre>
<p>und Singleton.tcc</p>
<pre><code class="language-cpp">namespace Lanthal
{
    namespace Core
    {
        namespace Patterns
        {

            template &lt;typename type&gt; type* Singleton &lt;type&gt;::m_instance = 0;

            /*
             Hier definiere ich den Singleton ctor
             im Header längst schon deklariert
            */
            template&lt;typename type&gt;
            Singleton&lt;type&gt;::Singleton()  
            {

            }

            template&lt;typename type&gt;
            Singleton&lt;type&gt;::Singleton(const Singleton&amp; c)
            {

            }

            template&lt;typename type&gt;
            type&amp; Singleton&lt;type&gt;::GetInstance()
            {
                    if (!m_instance)
                    {
                        m_instance = new type();
                        return *m_instance;
                    }

                    return *m_instance;
            }

            template&lt;typename type&gt;
            Singleton&lt;type&gt;&amp; Singleton&lt;type&gt;::operator =(const Singleton&amp; c)
            {
                return *this;
            }
        }
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2212886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212886</guid><dc:creator><![CDATA[exOfde]]></dc:creator><pubDate>Fri, 18 May 2012 16:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference to... das alte Problem. on Fri, 18 May 2012 16:53:13 GMT]]></title><description><![CDATA[<p>exOfde schrieb:</p>
<blockquote>
<pre><code class="language-cpp">/*
             Hier definiere ich den Singleton ctor
             im Header längst schon deklariert
            */
</code></pre>
</blockquote>
<p>Das geht so nicht; war auch Sepp Js erster Tip. Definiere das Zeug direkt im Header und fertig.</p>
<p>edit: Wobei &quot;das Zeug&quot; == &quot;alle Templatemethoden&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212903</guid><dc:creator><![CDATA[nman]]></dc:creator><pubDate>Fri, 18 May 2012 16:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference to... das alte Problem. on Fri, 18 May 2012 16:53:36 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u4178" rel="nofollow">nman</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f5" rel="nofollow">Linux/Unix</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x und C++11)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212904</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 18 May 2012 16:53:36 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference to... das alte Problem. on Mon, 21 May 2012 09:17:15 GMT]]></title><description><![CDATA[<p>exOfde schrieb:</p>
<blockquote>
<p>In der Source-datei so wie man es normalerweise oft auch tut.</p>
</blockquote>
<p>Es sei denn man schreibt Templates, da macht man das normalerweise extrem oft <strong>nicht</strong>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2213671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2213671</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 21 May 2012 09:17:15 GMT</pubDate></item></channel></rss>