<?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[Sehe durch meine Template-Konstruktionen nicht mehr durch ...]]></title><description><![CDATA[<p>Hi,</p>
<p>folgende zwei klassen existieren:</p>
<pre><code class="language-cpp">template&lt;class X,class Y&gt; P {
  P(X x, Y y);
}

template&lt;class X,class Y&gt; F {
  ...
}
</code></pre>
<p>angewendet in einer anderen Klasse:</p>
<pre><code class="language-cpp">template&lt;class S,class CS&gt; D { 
  ...
  // CS_temp und f haben den richtigen Typ
  P&lt;CS, F&lt;S, CS&gt; &gt; tmp_p(CS_temp,f);
</code></pre>
<p>Wird die Klasse D nun als D&lt;P&lt;double, int&gt;, P&lt;double, SimpleProbability&lt;int&gt; &gt; &gt; genutzt, komme ich irgendwann zu folgendem Fehler (ausgeloest in obiger P&lt;CS, ... &gt; temp_p(...) Zeile:</p>
<p>../P.h: In constructor ‘P&lt;TYPE_LEFT, TYPE_RIGHT&gt;::P(TYPE_LEFT, TYPE_RIGHT)<br />
[with TYPE_LEFT = P&lt;double, SimpleProbability&lt;int&gt; &gt;, TYPE_RIGHT = F&lt;P&lt;double, int&gt;, P&lt;double, SimpleProbability&lt;int&gt; &gt; &gt;]’:</p>
<p>../D.h:36: instantiated from ‘COMPLEX_STATE_TYPE D&lt;SIMPLE_TYPE, COMPLEX_TYPE&gt;::A(SIMPLE_TYPE) [with SIMPLE_TYPE = P&lt;double, int&gt;, COMPLEX_TYPE = P&lt;double, SimpleProbability&lt;int&gt; &gt;]’<br />
...<br />
instantiated from here<br />
...</p>
<p>../P.h:17: error: no matching function for call to ‘P&lt;double, SimpleProbability&lt;int&gt; &gt;::P()’</p>
<p>Das problem ist also das es keinen Default-Konstruktor fuer P gibt (wuerde auch wenig Sinn machen). Wohl aber den oben angegebenen Input-Konstruktor. Warum braucht man in &quot;P&lt;CS, F&lt;S, CS&gt; &gt; tmp_p(CS_temp,f)&quot; aber einen P() - Konstruktor? Und wie kann man das umgehen?</p>
<p>Gruesse Frager. <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/topic/172016/sehe-durch-meine-template-konstruktionen-nicht-mehr-durch</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 16:35:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172016.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 Jan 2007 15:33:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sehe durch meine Template-Konstruktionen nicht mehr durch ... on Wed, 31 Jan 2007 15:33:37 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgende zwei klassen existieren:</p>
<pre><code class="language-cpp">template&lt;class X,class Y&gt; P {
  P(X x, Y y);
}

template&lt;class X,class Y&gt; F {
  ...
}
</code></pre>
<p>angewendet in einer anderen Klasse:</p>
<pre><code class="language-cpp">template&lt;class S,class CS&gt; D { 
  ...
  // CS_temp und f haben den richtigen Typ
  P&lt;CS, F&lt;S, CS&gt; &gt; tmp_p(CS_temp,f);
</code></pre>
<p>Wird die Klasse D nun als D&lt;P&lt;double, int&gt;, P&lt;double, SimpleProbability&lt;int&gt; &gt; &gt; genutzt, komme ich irgendwann zu folgendem Fehler (ausgeloest in obiger P&lt;CS, ... &gt; temp_p(...) Zeile:</p>
<p>../P.h: In constructor ‘P&lt;TYPE_LEFT, TYPE_RIGHT&gt;::P(TYPE_LEFT, TYPE_RIGHT)<br />
[with TYPE_LEFT = P&lt;double, SimpleProbability&lt;int&gt; &gt;, TYPE_RIGHT = F&lt;P&lt;double, int&gt;, P&lt;double, SimpleProbability&lt;int&gt; &gt; &gt;]’:</p>
<p>../D.h:36: instantiated from ‘COMPLEX_STATE_TYPE D&lt;SIMPLE_TYPE, COMPLEX_TYPE&gt;::A(SIMPLE_TYPE) [with SIMPLE_TYPE = P&lt;double, int&gt;, COMPLEX_TYPE = P&lt;double, SimpleProbability&lt;int&gt; &gt;]’<br />
...<br />
instantiated from here<br />
...</p>
<p>../P.h:17: error: no matching function for call to ‘P&lt;double, SimpleProbability&lt;int&gt; &gt;::P()’</p>
<p>Das problem ist also das es keinen Default-Konstruktor fuer P gibt (wuerde auch wenig Sinn machen). Wohl aber den oben angegebenen Input-Konstruktor. Warum braucht man in &quot;P&lt;CS, F&lt;S, CS&gt; &gt; tmp_p(CS_temp,f)&quot; aber einen P() - Konstruktor? Und wie kann man das umgehen?</p>
<p>Gruesse Frager. <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/1220589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220589</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Wed, 31 Jan 2007 15:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to Sehe durch meine Template-Konstruktionen nicht mehr durch ... on Wed, 31 Jan 2007 16:02:24 GMT]]></title><description><![CDATA[<p>Frager schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">template&lt;class X,class Y&gt; P {
  P(X x, Y y);
}

template&lt;class X,class Y&gt; F {
  ...
}

template&lt;class S,class CS&gt; D { 
  ...
  // CS_temp und f haben den richtigen Typ
  P&lt;CS, F&lt;S, CS&gt; &gt; tmp_p(CS_temp,f);
</code></pre>
<p>...</p>
</blockquote>
<p>Das eine oder andere &quot;class&quot; würde nicht nur uns, sondern auch dem Compiler den Durchblick erleichtern. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
- ach ja: Da, wo Du derzeit &quot;class&quot; schreibst, ist inzwischen &quot;typename&quot; angesagt.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220631</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 31 Jan 2007 16:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Sehe durch meine Template-Konstruktionen nicht mehr durch ... on Thu, 01 Feb 2007 10:37:59 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>erstens:<br />
was ist eigentlich der Unterschied zwischen template&lt;class T&gt; und template&lt;typename T&gt; ... ?</p>
<p>zweitens:<br />
das problem nochmal uebersichtlicher und viel einfacher:</p>
<pre><code class="language-cpp">template&lt;typename X,typename Y&gt; 
class P {
  P(X x, Y y);
}
</code></pre>
<p>angewendet woanders:</p>
<pre><code class="language-cpp">P&lt;double,int&gt; p(0,0);

P&lt;P&lt;double,int&gt;, P&lt;double,int&gt; &gt; pp(p,p);
</code></pre>
<p>fuehrt zu:</p>
<p>.../P.h: In constructor ‘P&lt;TYPE_LEFT, TYPE_RIGHT&gt;::P(TYPE_LEFT, TYPE_RIGHT) [with TYPE_LEFT = P&lt;double, int&gt;, TYPE_RIGHT = P&lt;double, int&gt;]’:</p>
<p>main.cpp:12: instantiated from here</p>
<p>.../P.h:17: error: no matching function for call to ‘P&lt;double, int&gt;::P()’</p>
<p>Warum wird hier nach einem P::P() Konstruktor verlangt?? Wie kann man diese umgehen?</p>
<p>Gruesse Frager. :)[/quote]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220990</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Thu, 01 Feb 2007 10:37:59 GMT</pubDate></item><item><title><![CDATA[Reply to Sehe durch meine Template-Konstruktionen nicht mehr durch ... on Thu, 01 Feb 2007 10:45:07 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>fand soeben herraus, dass</p>
<pre><code class="language-cpp">P&lt;P&lt;double,int&gt;, P&lt;double,int&gt; &gt; pp(P&lt;double,int&gt; (p), P&lt;double,int&gt; (p));
</code></pre>
<p>funktioniert ... aber wieso muss man den copy konstruktor nochmal explizit aufrufen? <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>
<p>Gruesse Frager. <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/1220994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220994</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Thu, 01 Feb 2007 10:45:07 GMT</pubDate></item><item><title><![CDATA[Reply to Sehe durch meine Template-Konstruktionen nicht mehr durch ... on Thu, 01 Feb 2007 10:49:45 GMT]]></title><description><![CDATA[<p>Frager schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>erstens:<br />
was ist eigentlich der Unterschied zwischen template&lt;class T&gt; und template&lt;typename T&gt; ... ?</p>
</blockquote>
<p>typename sieht schöner aus <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="😃"
    /> (syntaktisch ist beides gleichwertig)</p>
<blockquote>
<p>zweitens:<br />
Warum wird hier nach einem P::P() Konstruktor verlangt?? Wie kann man diese umgehen?</p>
</blockquote>
<p>Um diese Frage zu beantworten, müssten wir die Definition des P-Ctor's sehen.</p>
<p>Ich tippe mal spontan darauf, daß du im Ctor-Rumpf die Elemente deines Paares mit den übergebenen Parametern füllst. Das bedeutet, daß der Compiler diese Elemente zunächst mit dem Default-Ctor initialisieren und anschließend einen neuen Wert zuweisen muß. Die Lösung des Problems heißt &quot;Initialisierungsliste&quot;:</p>
<pre><code class="language-cpp">template&lt;typename X,typename Y&gt;
class P
{
  X val1;
  y val2;
public:
  P(X x,Y y) : val1(x), val2(y) {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1220997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220997</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 01 Feb 2007 10:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Sehe durch meine Template-Konstruktionen nicht mehr durch ... on Thu, 01 Feb 2007 11:11:51 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Ich tippe mal spontan darauf, daß du im Ctor-Rumpf die Elemente deines Paares mit den übergebenen Parametern füllst. Das bedeutet, daß der Compiler diese Elemente zunächst mit dem Default-Ctor initialisieren und anschließend einen neuen Wert zuweisen muß. Die Lösung des Problems heißt &quot;Initialisierungsliste&quot;:</p>
<pre><code class="language-cpp">template&lt;typename X,typename Y&gt;
class P
{
  X val1;
  y val2;
public:
  P(X x,Y y) : val1(x), val2(y) {}
};
</code></pre>
</blockquote>
<p>Yipp, so gehts ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
CStoll, du bist gut <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>
<p>Vielen Dank,<br />
Frager</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1221012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1221012</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Thu, 01 Feb 2007 11:11:51 GMT</pubDate></item></channel></rss>