<?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[Frage zu Template classe]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche eine template Klasse &quot;speicher&quot; zu schreiben, die nichts anderes macht als nur einen Wert zu speichern. (Wrapper classe)</p>
<p>Nun möchte ich Objekte dieser Klasse sortieren können.<br />
Dafür habe ich den Operator &lt; überladen.</p>
<p>Soweit funktioniert das auch. Nun möchte ich, dass die Sortierfunktion ebenfalls mit Templates arbeitet. Dies funktioniert auch.</p>
<p>Wenn ich aber versuche zwei Objekte der Klasse &quot;speicher&quot; sortieren zu lassen, geht es nicht.<br />
(Fehlerstelle und Fehlerausgabe steht als Kommentar im Code in &quot;main&quot;.)</p>
<pre><code class="language-cpp">#include &lt;Windows.h&gt;     //für Sleep()
#include &lt;Iostream&gt;		 //für die Ausgabe
using namespace std;	 

template &lt;class T2&gt;  
class speicher											//Dient nur der Speicherung eines Wertes					
{
	public:
	T2 wert;
	speicher(T2 wert_):wert(wert_){}					//Konstruktor
	speicher(const speicher&amp; a): wert(a.wert){};		//copy Construktor

	T2 gib_wert() {return wert;}						//gibt &quot;wert&quot; zurück

	bool operator &lt; (speicher s) {return wert &lt; s.gib_wert();}	//Operator &lt; definieren

};

template &lt;typename T&gt;		//soll das Maximum von zwei Pararmetern berechnen.
T finde_Maximum(T a,T b)
{
	if(a&lt;b) return b;
	return a;

}

int main()
{

	//test der &quot;finde_maximum&quot; Methode
	int xi = 5;
	int yi = 7;
	cout &lt;&lt; finde_Maximum(xi,yi) &lt;&lt; &quot;\n&quot;;

	double xd = 6.543;
	double yd = 6.765;
	cout &lt;&lt; finde_Maximum(xd,yd) &lt;&lt; &quot;\n&quot;;

	//test der &quot;speicher&quot; Klasse
	speicher&lt;int&gt;* s1 = new speicher&lt;int&gt;(5);	
	//Zeiger auf Objekt der Klasse &quot;speicher&quot; mit Wert 5
	speicher&lt;int&gt;* s2 = new speicher&lt;int&gt;(7); 
	//Zeiger auf Objekt der Klasse &quot;speicher&quot; mit Wert 2

	cout &lt;&lt; s1-&gt;gib_wert() &lt;&lt; &quot;\n&quot;;
	cout &lt;&lt; s2-&gt;gib_wert() &lt;&lt; &quot;\n&quot;;

	 bool ergebnis= (*s1&lt;*s2);
	 if (ergebnis) {cout &lt;&lt; &quot;true \n&quot;;}
	 else {cout &lt;&lt; &quot;false \n&quot;;}

	//Bis hierhin funktioniert alles.

	//Dieses funktioniert nicht.
	//Es kommt der Fehler:
	//error C2955: &quot;speicher&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.
	speicher maximum = finde_Maximum&lt;speicher&gt;(*s1,*s2)

	Sleep(20000);
	return 1;

}
</code></pre>
<p>Was muß ich anders machen, damit es geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224840/frage-zu-template-classe</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 03:29:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224840.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Oct 2008 17:11:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Template classe on Wed, 15 Oct 2008 17:11:28 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche eine template Klasse &quot;speicher&quot; zu schreiben, die nichts anderes macht als nur einen Wert zu speichern. (Wrapper classe)</p>
<p>Nun möchte ich Objekte dieser Klasse sortieren können.<br />
Dafür habe ich den Operator &lt; überladen.</p>
<p>Soweit funktioniert das auch. Nun möchte ich, dass die Sortierfunktion ebenfalls mit Templates arbeitet. Dies funktioniert auch.</p>
<p>Wenn ich aber versuche zwei Objekte der Klasse &quot;speicher&quot; sortieren zu lassen, geht es nicht.<br />
(Fehlerstelle und Fehlerausgabe steht als Kommentar im Code in &quot;main&quot;.)</p>
<pre><code class="language-cpp">#include &lt;Windows.h&gt;     //für Sleep()
#include &lt;Iostream&gt;		 //für die Ausgabe
using namespace std;	 

template &lt;class T2&gt;  
class speicher											//Dient nur der Speicherung eines Wertes					
{
	public:
	T2 wert;
	speicher(T2 wert_):wert(wert_){}					//Konstruktor
	speicher(const speicher&amp; a): wert(a.wert){};		//copy Construktor

	T2 gib_wert() {return wert;}						//gibt &quot;wert&quot; zurück

	bool operator &lt; (speicher s) {return wert &lt; s.gib_wert();}	//Operator &lt; definieren

};

template &lt;typename T&gt;		//soll das Maximum von zwei Pararmetern berechnen.
T finde_Maximum(T a,T b)
{
	if(a&lt;b) return b;
	return a;

}

int main()
{

	//test der &quot;finde_maximum&quot; Methode
	int xi = 5;
	int yi = 7;
	cout &lt;&lt; finde_Maximum(xi,yi) &lt;&lt; &quot;\n&quot;;

	double xd = 6.543;
	double yd = 6.765;
	cout &lt;&lt; finde_Maximum(xd,yd) &lt;&lt; &quot;\n&quot;;

	//test der &quot;speicher&quot; Klasse
	speicher&lt;int&gt;* s1 = new speicher&lt;int&gt;(5);	
	//Zeiger auf Objekt der Klasse &quot;speicher&quot; mit Wert 5
	speicher&lt;int&gt;* s2 = new speicher&lt;int&gt;(7); 
	//Zeiger auf Objekt der Klasse &quot;speicher&quot; mit Wert 2

	cout &lt;&lt; s1-&gt;gib_wert() &lt;&lt; &quot;\n&quot;;
	cout &lt;&lt; s2-&gt;gib_wert() &lt;&lt; &quot;\n&quot;;

	 bool ergebnis= (*s1&lt;*s2);
	 if (ergebnis) {cout &lt;&lt; &quot;true \n&quot;;}
	 else {cout &lt;&lt; &quot;false \n&quot;;}

	//Bis hierhin funktioniert alles.

	//Dieses funktioniert nicht.
	//Es kommt der Fehler:
	//error C2955: &quot;speicher&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.
	speicher maximum = finde_Maximum&lt;speicher&gt;(*s1,*s2)

	Sleep(20000);
	return 1;

}
</code></pre>
<p>Was muß ich anders machen, damit es geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599536</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 15 Oct 2008 17:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Template classe on Wed, 15 Oct 2008 17:43:58 GMT]]></title><description><![CDATA[<p>MisterX schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//error C2955: &quot;speicher&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.
	speicher maximum = finde_Maximum&lt;speicher&gt;(*s1,*s2);
//-----------------müsste glaub ich in diesem Fall so lauten:
	speicher&lt;int&gt; maximum = finde_Maximum&lt;speicher&gt;(*s1,*s2);
//Denn du musst ja immernoch angeben, was da in deinem Speicher gelegt wird
</code></pre>
<p>Was muß ich anders machen, damit es geht?</p>
</blockquote>
<p>Gruß UsYer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599554</guid><dc:creator><![CDATA[Such dir was aus]]></dc:creator><pubDate>Wed, 15 Oct 2008 17:43:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Template classe on Wed, 15 Oct 2008 18:13:51 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe, aber das scheint nicht der Fehler zu sein.<br />
Denn wenn ich nur</p>
<pre><code class="language-cpp">finde_Maximum&lt;speicher&gt;(*s1,*s2);
</code></pre>
<p>schreibe ohne das Ergebnis zuzuweisen erhalte ich den selben Fehler wie in meinem ersten Post im code genannt.</p>
<p>Was kann sonst noch der Fehler sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599572</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 15 Oct 2008 18:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Template classe on Wed, 15 Oct 2008 18:27:45 GMT]]></title><description><![CDATA[<p>Du musst schon bei jedem Vorkommen von <code>speicher</code> die Templateargumentliste angeben.</p>
<pre><code class="language-cpp">speicher&lt;int&gt; maximum = finde_Maximum&lt;speicher&lt;int&gt; &gt;(*s1,*s2); // oder:
speicher&lt;int&gt; maximum = finde_Maximum(*s1,*s2);
</code></pre>
<p>Abgesehen davon solltest du mit <code>new</code> angelegten Speicher wieder mit <code>delete</code> freigeben (weshalb machst du das überhaupt?) und den Vergleichsoperator eventuell global machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599577</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 15 Oct 2008 18:27:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Template classe on Wed, 15 Oct 2008 20:12:45 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Du musst schon bei jedem Vorkommen von <code>speicher</code> die Templateargumentliste angeben.</p>
<pre><code class="language-cpp">speicher&lt;int&gt; maximum = finde_Maximum&lt;speicher&lt;int&gt; &gt;(*s1,*s2); // oder:
speicher&lt;int&gt; maximum = finde_Maximum(*s1,*s2);
</code></pre>
<p>Abgesehen davon solltest du mit <code>new</code> angelegten Speicher wieder mit <code>delete</code> freigeben (weshalb machst du das überhaupt?) und den Vergleichsoperator eventuell global machen.</p>
</blockquote>
<p>Danke!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599623</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 15 Oct 2008 20:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Template classe on Wed, 15 Oct 2008 20:22:58 GMT]]></title><description><![CDATA[<p>Noch ein paar Design Tipps:</p>
<pre><code class="language-cpp">template &lt;class T2&gt;  
class speicher											//Dient nur der Speicherung eines Wertes					
{
	public:
	T2 wert;      // wert sollte private sein
	speicher(T2 wert_):wert(wert_){}  //	( const T2&amp; wert )benutzen			
	speicher(const speicher&amp; a): wert(a.wert){};  // brauchst du hier nicht

	T2 gib_wert() {return wert;}  // &lt;- const T2&amp; gib_wert() const {...}						

        // op&lt; global machen und wieder const speicher&amp; s
	bool operator &lt; (speicher s) {return wert &lt; s.gib_wert();}	
};

// std::max benutzen
template &lt;typename T&gt;
T finde_Maximum(T a,T b)
{
    if(a&lt;b) return b;
    return a;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1599625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599625</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 15 Oct 2008 20:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Template classe on Thu, 16 Oct 2008 06:41:59 GMT]]></title><description><![CDATA[<p>MisterX schrieb:</p>
<blockquote>
<p>...Danke!!!!</p>
</blockquote>
<p>Hi MisterX,</p>
<p>auf diese - sehr wesentliche - Frage bist Du bislang noch nicht eingegangen:</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>...<br />
Abgesehen davon solltest du mit <code>new</code> angelegten Speicher wieder mit <code>delete</code> freigeben (weshalb machst du das überhaupt?) ...</p>
</blockquote>
<p>(oder habe ich das übersehen?)</p>
<p>Auch wenn sie sic nicht auf Dein aktuelles Problem bezieht, kann Dir ein wenig Nachdenken an dieser Stelle eine Menge zukünftigen Ärger sparen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599719</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 16 Oct 2008 06:41:59 GMT</pubDate></item></channel></rss>