<?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;lt;typename T&amp;gt;class Observer...template&amp;lt;typename T&amp;gt;Observer&amp;lt;T&amp;gt;::Observer(void)]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe vor das MVC anzuwenden. Nach Lektüre des Buches &quot;Design Patterns&quot; und dem darin vorgeschlagenen MVC Entwurfsmuster habe ich im Internet eine &quot;bessere&quot; Lösung gefunden. In dieser Lösung wird das Problem mit Templates gelöst. Daruch entfallen &quot;Casts&quot; und das im Buch &quot;Design Patterns&quot; aufgezeigte Zeiger-Problem.<br />
Also habe ich mal Testweise Code im Visual Studio 2008 kompiliert.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;   
#include &lt;vector&gt;   

    template &lt;class T&gt;   
    class Observer   
       {   
       public:   
          Observer() {}   
          virtual ~Observer() {}   
         virtual void update(T *subject)= 0;   
      };   

   template &lt;class T&gt;   
   class Subject   
      {   
      public:   
         Subject() {}   
         virtual ~Subject() {}   
         void attach (Observer&lt;T&gt; &amp;observer)   
            {   
            m_observers.push_back(&amp;observer);   
            }   
         void notify ()   
            {   
            std::vector&lt;Observer&lt;T&gt; *&gt;::iterator it;   
            for (it=m_observers.begin();it!=m_observers.end();it++) (*it)-&gt;update(static_cast&lt;T *&gt;(this));   
            }   
      private:   
         std::vector&lt;Observer&lt;T&gt; *&gt; m_observers;   
      };   

   class Temperature : public Subject&lt;Temperature&gt;   
      {   
      public:   
         Temperature() {}   
         ~Temperature() {}   
         void temperatureChanged () {notify();}   
         void getTemperature() {std::cout &lt;&lt;&quot;   Getting the temperature.&quot; &lt;&lt; std::endl;}   
      };   

   class Pressure : public Subject&lt;Pressure&gt;   
      {   
      public:   
         Pressure() {}   
         ~Pressure() {}   
         void pressureChanged () {notify();}   
         void getPressure() {std::cout &lt;&lt; &quot;   Getting the pressure.&quot; &lt;&lt; std::endl;}   
      };   

   class EnvironmentWindow : public Observer&lt;Temperature&gt;, public Observer&lt;Pressure&gt;   
      {   
      public:   
         EnvironmentWindow() {}   
         ~EnvironmentWindow() {}   
         void update (Temperature *subject) {std::cout &lt;&lt; &quot;Temperature was changed&quot; &lt;&lt; std::endl; subject-&gt;getTemperature();}   
         void update (Pressure    *subject) {std::cout &lt;&lt; &quot;Pressure was changed&quot;    &lt;&lt; std::endl; subject-&gt;getPressure   ();}   
      };   

   class PanicSirene : public Observer&lt;Temperature&gt;   
      {   
      public:   
         PanicSirene() {}   
         ~PanicSirene() {}   
         void update (Temperature *subject)   
            {   
           std::cout &lt;&lt; &quot;Temperature was changed, sound the sirene&quot; &lt;&lt; std::endl;   
            subject-&gt;getTemperature();   
            }   
      };

int _tmain(int argc, _TCHAR* argv[])
{
   Temperature       temp;   
   Pressure          press;   
   EnvironmentWindow win;   
   PanicSirene       panic;   

   temp .attach (win  );   
   temp .attach (panic);   
   press.attach (win  );   

   temp.temperatureChanged ();   
   press.pressureChanged ();   

   return (0);   
}
</code></pre>
<p>Jo, funktioniert. Da ich aber gerne die Klassen in &quot;.h&quot; und &quot;.cpp&quot; nutze um Deklaration und Definition zu trennen abe ich folgendes gemacht:</p>
<p>Observer.h</p>
<pre><code class="language-cpp">#pragma once

template&lt;typename T&gt;class Observer
{
public:
    Observer(void);
    virtual ~Observer(void);
    virtual void update( T* )= 0;
};
</code></pre>
<p>Observer.cpp</p>
<pre><code class="language-cpp">#include &quot;Observer.h&quot;

template&lt;typename T&gt;Observer&lt;T&gt;::Observer(void)
{
}

template&lt;typename T&gt;Observer&lt;T&gt;::~Observer(void)
{
}
</code></pre>
<p>dann ändern:</p>
<pre><code class="language-cpp">#include &quot;Observer.h&quot;

/*
template &lt;class T&gt;   
    class Observer   
       {   
       public:   
          Observer() {}   
          virtual ~Observer() {}   
         virtual void update(T *subject)= 0;   
      };   
*/
</code></pre>
<p>bekomme ich Linkerfehler:</p>
<blockquote>
<ol>
<li></li>
</ol>
<p>unresolved external symbol &quot;public: virtual __thiscall Observer&lt;class Temperature&gt;::~Observer&lt;class Temperature&gt;(void)&quot; (??1?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>O</mi><mi>b</mi><mi>s</mi><mi>e</mi><mi>r</mi><mi>v</mi><mi>e</mi><mi>r</mi><mi mathvariant="normal">@</mi><mi>V</mi><mi>T</mi><mi>e</mi><mi>m</mi><mi>p</mi><mi>e</mi><mi>r</mi><mi>a</mi><mi>t</mi><mi>u</mi><mi>r</mi><mi>e</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>U</mi><mi>A</mi><mi>E</mi><mi mathvariant="normal">@</mi><mi>X</mi><mi>Z</mi><mo>)</mo><mi>r</mi><mi>e</mi><mi>f</mi><mi>e</mi><mi>r</mi><mi>e</mi><mi>n</mi><mi>c</mi><mi>e</mi><mi>d</mi><mi>i</mi><mi>n</mi><mi>f</mi><mi>u</mi><mi>n</mi><mi>c</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">_</mi><mi>u</mi><mi>n</mi><mi>w</mi><mi>i</mi><mi>n</mi><mi>d</mi><mi>f</mi><mi>u</mi><mi>n</mi><mi>c</mi><mi>l</mi><mi>e</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">Observer@VTemperature@@@@UAE@XZ) referenced in function \_\_unwindfunclet</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1.06em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.02778em;">O</span><span class="mord mathit">b</span><span class="mord mathit">s</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit" style="margin-right:0.03588em;">v</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit" style="margin-right:0.13889em;">T</span><span class="mord mathit">e</span><span class="mord mathit">m</span><span class="mord mathit">p</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">a</span><span class="mord mathit">t</span><span class="mord mathit">u</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.10903em;">U</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.07847em;">X</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mclose">)</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathit">n</span><span class="mord mathit">c</span><span class="mord mathit">e</span><span class="mord mathit">d</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit">c</span><span class="mord mathit">t</span><span class="mord mathit">i</span><span class="mord mathit">o</span><span class="mord mathit">n</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.02691em;">w</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit">d</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit">c</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">e</span><span class="mord mathit">t</span></span></span></span>??0EnvironmentWindow@@QAE@XZ$0</p>
<ol start="2">
<li></li>
</ol>
<p>unresolved external symbol &quot;public: __thiscall Observer&lt;class Pressure&gt;::Observer&lt;class Pressure&gt;(void)&quot; (??0?$Observer@VPressure@@@@QAE@XZ) referenced in function &quot;public: __thiscall EnvironmentWindow::EnvironmentWindow(void)&quot; (??0EnvironmentWindow@@QAE@XZ)</p>
<ol start="3">
<li></li>
</ol>
<p>unresolved external symbol &quot;public: __thiscall Observer&lt;class Temperature&gt;::Observer&lt;class Temperature&gt;(void)&quot; (??0?$Observer@VTemperature@@@@QAE@XZ) referenced in function &quot;public: __thiscall EnvironmentWindow::EnvironmentWindow(void)&quot; (??0EnvironmentWindow@@QAE@XZ)</p>
<ol start="4">
<li></li>
</ol>
<p>unresolved external symbol &quot;public: virtual __thiscall Observer&lt;class Pressure&gt;::~Observer&lt;class Pressure&gt;(void)&quot; (??1?$Observer@VPressure@@@@UAE@XZ) referenced in function &quot;public: virtual __thiscall EnvironmentWindow::~EnvironmentWindow(void)&quot; (??1EnvironmentWindow@@UAE@XZ)</p>
</blockquote>
<p>Der Compiler hat mit der Überstetzung kein Problem, der Linker aber schon. Er findet die Konstruktoren und die Destruktoren nicht.</p>
<p>Ich habe keinen Anstatz zur Lösung des Problems. Wieso ging das vorher als ich den Observer noch nicht in Header- und cpp-Datei ausgelagert habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305905/template-lt-typename-t-gt-class-observer-template-lt-typename-t-gt-observer-lt-t-gt-observer-void</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 12:25:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305905.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Jul 2012 22:57:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template&amp;lt;typename T&amp;gt;class Observer...template&amp;lt;typename T&amp;gt;Observer&amp;lt;T&amp;gt;::Observer(void) on Wed, 11 Jul 2012 22:57:08 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe vor das MVC anzuwenden. Nach Lektüre des Buches &quot;Design Patterns&quot; und dem darin vorgeschlagenen MVC Entwurfsmuster habe ich im Internet eine &quot;bessere&quot; Lösung gefunden. In dieser Lösung wird das Problem mit Templates gelöst. Daruch entfallen &quot;Casts&quot; und das im Buch &quot;Design Patterns&quot; aufgezeigte Zeiger-Problem.<br />
Also habe ich mal Testweise Code im Visual Studio 2008 kompiliert.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;   
#include &lt;vector&gt;   

    template &lt;class T&gt;   
    class Observer   
       {   
       public:   
          Observer() {}   
          virtual ~Observer() {}   
         virtual void update(T *subject)= 0;   
      };   

   template &lt;class T&gt;   
   class Subject   
      {   
      public:   
         Subject() {}   
         virtual ~Subject() {}   
         void attach (Observer&lt;T&gt; &amp;observer)   
            {   
            m_observers.push_back(&amp;observer);   
            }   
         void notify ()   
            {   
            std::vector&lt;Observer&lt;T&gt; *&gt;::iterator it;   
            for (it=m_observers.begin();it!=m_observers.end();it++) (*it)-&gt;update(static_cast&lt;T *&gt;(this));   
            }   
      private:   
         std::vector&lt;Observer&lt;T&gt; *&gt; m_observers;   
      };   

   class Temperature : public Subject&lt;Temperature&gt;   
      {   
      public:   
         Temperature() {}   
         ~Temperature() {}   
         void temperatureChanged () {notify();}   
         void getTemperature() {std::cout &lt;&lt;&quot;   Getting the temperature.&quot; &lt;&lt; std::endl;}   
      };   

   class Pressure : public Subject&lt;Pressure&gt;   
      {   
      public:   
         Pressure() {}   
         ~Pressure() {}   
         void pressureChanged () {notify();}   
         void getPressure() {std::cout &lt;&lt; &quot;   Getting the pressure.&quot; &lt;&lt; std::endl;}   
      };   

   class EnvironmentWindow : public Observer&lt;Temperature&gt;, public Observer&lt;Pressure&gt;   
      {   
      public:   
         EnvironmentWindow() {}   
         ~EnvironmentWindow() {}   
         void update (Temperature *subject) {std::cout &lt;&lt; &quot;Temperature was changed&quot; &lt;&lt; std::endl; subject-&gt;getTemperature();}   
         void update (Pressure    *subject) {std::cout &lt;&lt; &quot;Pressure was changed&quot;    &lt;&lt; std::endl; subject-&gt;getPressure   ();}   
      };   

   class PanicSirene : public Observer&lt;Temperature&gt;   
      {   
      public:   
         PanicSirene() {}   
         ~PanicSirene() {}   
         void update (Temperature *subject)   
            {   
           std::cout &lt;&lt; &quot;Temperature was changed, sound the sirene&quot; &lt;&lt; std::endl;   
            subject-&gt;getTemperature();   
            }   
      };

int _tmain(int argc, _TCHAR* argv[])
{
   Temperature       temp;   
   Pressure          press;   
   EnvironmentWindow win;   
   PanicSirene       panic;   

   temp .attach (win  );   
   temp .attach (panic);   
   press.attach (win  );   

   temp.temperatureChanged ();   
   press.pressureChanged ();   

   return (0);   
}
</code></pre>
<p>Jo, funktioniert. Da ich aber gerne die Klassen in &quot;.h&quot; und &quot;.cpp&quot; nutze um Deklaration und Definition zu trennen abe ich folgendes gemacht:</p>
<p>Observer.h</p>
<pre><code class="language-cpp">#pragma once

template&lt;typename T&gt;class Observer
{
public:
    Observer(void);
    virtual ~Observer(void);
    virtual void update( T* )= 0;
};
</code></pre>
<p>Observer.cpp</p>
<pre><code class="language-cpp">#include &quot;Observer.h&quot;

template&lt;typename T&gt;Observer&lt;T&gt;::Observer(void)
{
}

template&lt;typename T&gt;Observer&lt;T&gt;::~Observer(void)
{
}
</code></pre>
<p>dann ändern:</p>
<pre><code class="language-cpp">#include &quot;Observer.h&quot;

/*
template &lt;class T&gt;   
    class Observer   
       {   
       public:   
          Observer() {}   
          virtual ~Observer() {}   
         virtual void update(T *subject)= 0;   
      };   
*/
</code></pre>
<p>bekomme ich Linkerfehler:</p>
<blockquote>
<ol>
<li></li>
</ol>
<p>unresolved external symbol &quot;public: virtual __thiscall Observer&lt;class Temperature&gt;::~Observer&lt;class Temperature&gt;(void)&quot; (??1?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>O</mi><mi>b</mi><mi>s</mi><mi>e</mi><mi>r</mi><mi>v</mi><mi>e</mi><mi>r</mi><mi mathvariant="normal">@</mi><mi>V</mi><mi>T</mi><mi>e</mi><mi>m</mi><mi>p</mi><mi>e</mi><mi>r</mi><mi>a</mi><mi>t</mi><mi>u</mi><mi>r</mi><mi>e</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>U</mi><mi>A</mi><mi>E</mi><mi mathvariant="normal">@</mi><mi>X</mi><mi>Z</mi><mo>)</mo><mi>r</mi><mi>e</mi><mi>f</mi><mi>e</mi><mi>r</mi><mi>e</mi><mi>n</mi><mi>c</mi><mi>e</mi><mi>d</mi><mi>i</mi><mi>n</mi><mi>f</mi><mi>u</mi><mi>n</mi><mi>c</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">_</mi><mi>u</mi><mi>n</mi><mi>w</mi><mi>i</mi><mi>n</mi><mi>d</mi><mi>f</mi><mi>u</mi><mi>n</mi><mi>c</mi><mi>l</mi><mi>e</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">Observer@VTemperature@@@@UAE@XZ) referenced in function \_\_unwindfunclet</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1.06em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.02778em;">O</span><span class="mord mathit">b</span><span class="mord mathit">s</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit" style="margin-right:0.03588em;">v</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathit" style="margin-right:0.13889em;">T</span><span class="mord mathit">e</span><span class="mord mathit">m</span><span class="mord mathit">p</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">a</span><span class="mord mathit">t</span><span class="mord mathit">u</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.10903em;">U</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.07847em;">X</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mclose">)</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathit">n</span><span class="mord mathit">c</span><span class="mord mathit">e</span><span class="mord mathit">d</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit">c</span><span class="mord mathit">t</span><span class="mord mathit">i</span><span class="mord mathit">o</span><span class="mord mathit">n</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.02691em;">w</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit">d</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit">c</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">e</span><span class="mord mathit">t</span></span></span></span>??0EnvironmentWindow@@QAE@XZ$0</p>
<ol start="2">
<li></li>
</ol>
<p>unresolved external symbol &quot;public: __thiscall Observer&lt;class Pressure&gt;::Observer&lt;class Pressure&gt;(void)&quot; (??0?$Observer@VPressure@@@@QAE@XZ) referenced in function &quot;public: __thiscall EnvironmentWindow::EnvironmentWindow(void)&quot; (??0EnvironmentWindow@@QAE@XZ)</p>
<ol start="3">
<li></li>
</ol>
<p>unresolved external symbol &quot;public: __thiscall Observer&lt;class Temperature&gt;::Observer&lt;class Temperature&gt;(void)&quot; (??0?$Observer@VTemperature@@@@QAE@XZ) referenced in function &quot;public: __thiscall EnvironmentWindow::EnvironmentWindow(void)&quot; (??0EnvironmentWindow@@QAE@XZ)</p>
<ol start="4">
<li></li>
</ol>
<p>unresolved external symbol &quot;public: virtual __thiscall Observer&lt;class Pressure&gt;::~Observer&lt;class Pressure&gt;(void)&quot; (??1?$Observer@VPressure@@@@UAE@XZ) referenced in function &quot;public: virtual __thiscall EnvironmentWindow::~EnvironmentWindow(void)&quot; (??1EnvironmentWindow@@UAE@XZ)</p>
</blockquote>
<p>Der Compiler hat mit der Überstetzung kein Problem, der Linker aber schon. Er findet die Konstruktoren und die Destruktoren nicht.</p>
<p>Ich habe keinen Anstatz zur Lösung des Problems. Wieso ging das vorher als ich den Observer noch nicht in Header- und cpp-Datei ausgelagert habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232077</guid><dc:creator><![CDATA[FrankTheFox]]></dc:creator><pubDate>Wed, 11 Jul 2012 22:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;typename T&amp;gt;class Observer...template&amp;lt;typename T&amp;gt;Observer&amp;lt;T&amp;gt;::Observer(void) on Thu, 12 Jul 2012 05:31:47 GMT]]></title><description><![CDATA[<p>Guck mal unter <a href="http://www.c-plusplus.net/forum/151578" rel="nofollow">Punkt 5.</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232087</guid><dc:creator><![CDATA[C Newbie]]></dc:creator><pubDate>Thu, 12 Jul 2012 05:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;typename T&amp;gt;class Observer...template&amp;lt;typename T&amp;gt;Observer&amp;lt;T&amp;gt;::Observer(void) on Thu, 12 Jul 2012 08:40:45 GMT]]></title><description><![CDATA[<p>Ach schitepuupen...</p>
<p>Ok. So gehts <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>
<pre><code class="language-cpp">#include &quot;Observer.h&quot;

template&lt;typename T&gt;Observer&lt;T&gt;::Observer(void)
{
}

template&lt;typename T&gt;Observer&lt;T&gt;::~Observer(void)
{
}

//Klassen bekannt machen...
class Temperature;
class Pressure;

//Der &quot;explicit&quot; Instanziierungteil...
template class Observer&lt;Temperature&gt;; 
template class Observer&lt;Pressure&gt;;
</code></pre>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232130</guid><dc:creator><![CDATA[FrankTheFox]]></dc:creator><pubDate>Thu, 12 Jul 2012 08:40:45 GMT</pubDate></item></channel></rss>