<?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[eigener find-Algorithmus als Template...]]></title><description><![CDATA[<p>Hi,</p>
<p>was an der Definition mache ich falsch?<br />
Und wann muss ich beim Aufruf mit angeben, um welchen Typ es sich handelt und wann nicht?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;cassert&gt;

using namespace std;

template &lt;typename T&gt;
bool myfind(list&lt;T&gt;::iterator beg, list&lt;T&gt;::iterator end, T const &amp;val)
{
	for( ; beg != end; ++beg)
		if(*beg == val) return true;

	return false;	
}

int main()
{

	list&lt;int&gt; ilist;
	for(int i(0); i &lt;= 10; ++i)
		ilist.push_back(i*10);

	assert(myfind(ilist.begin(), ilist.end(), 50));
	//assert(!::myfind(ilist.begin(), ilist.end(), 110));

	return 0;
}
</code></pre>
<p>Meldung:<br />
9.12.cpp:9: Fehler: Templatedeklaration von »bool myfind«<br />
9.12.cpp:9: Fehler: expected <code>)' before »beg« 9.12.cpp:9: Fehler: expected</code>)' before »end«<br />
9.12.cpp:9: Fehler: expected primary-expression before »const«<br />
9.12.cpp: In function »int main()«:<br />
9.12.cpp:25: Fehler: »myfind« wurde in diesem Gültigkeitsbereich nicht definiert</p>
<p>Danke schonmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219458/eigener-find-algorithmus-als-template</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 07:57:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219458.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Aug 2008 15:13:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 15:13:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>was an der Definition mache ich falsch?<br />
Und wann muss ich beim Aufruf mit angeben, um welchen Typ es sich handelt und wann nicht?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;cassert&gt;

using namespace std;

template &lt;typename T&gt;
bool myfind(list&lt;T&gt;::iterator beg, list&lt;T&gt;::iterator end, T const &amp;val)
{
	for( ; beg != end; ++beg)
		if(*beg == val) return true;

	return false;	
}

int main()
{

	list&lt;int&gt; ilist;
	for(int i(0); i &lt;= 10; ++i)
		ilist.push_back(i*10);

	assert(myfind(ilist.begin(), ilist.end(), 50));
	//assert(!::myfind(ilist.begin(), ilist.end(), 110));

	return 0;
}
</code></pre>
<p>Meldung:<br />
9.12.cpp:9: Fehler: Templatedeklaration von »bool myfind«<br />
9.12.cpp:9: Fehler: expected <code>)' before »beg« 9.12.cpp:9: Fehler: expected</code>)' before »end«<br />
9.12.cpp:9: Fehler: expected primary-expression before »const«<br />
9.12.cpp: In function »int main()«:<br />
9.12.cpp:25: Fehler: »myfind« wurde in diesem Gültigkeitsbereich nicht definiert</p>
<p>Danke schonmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558533</guid><dc:creator><![CDATA[this!=that]]></dc:creator><pubDate>Sun, 03 Aug 2008 15:13:47 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 15:26:27 GMT]]></title><description><![CDATA[<p>Ok ich habs! Was so ein paar typenames in Verbindung mit Iteratoren bewirken können. Auch wenn ich die Notwendigkeit immer noch nicht ganz gecheckt habe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558541</guid><dc:creator><![CDATA[this!=that]]></dc:creator><pubDate>Sun, 03 Aug 2008 15:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 15:26:35 GMT]]></title><description><![CDATA[<p>Probiers mal mit:</p>
<pre><code class="language-cpp">bool myfind(T beg, T end, T const &amp;val){...}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1558542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558542</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 03 Aug 2008 15:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 15:40:22 GMT]]></title><description><![CDATA[<p>Salut,</p>
<p>davon abgesehen, dass es mit den typenames vor den iterator-defs jetzt funktioniert, kann es stimmen, dass T gleichzeitig für den Typ (zB int) steht und dann auch noch für einen iterator&lt;int&gt;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558549</guid><dc:creator><![CDATA[this!=that]]></dc:creator><pubDate>Sun, 03 Aug 2008 15:40:22 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 16:00:11 GMT]]></title><description><![CDATA[<p>Also das typedef ist dazu da, um dem Compiler zu sagen, dass das kommende eine Typdefinition ist.</p>
<blockquote>
<p>davon abgesehen, dass es mit den typenames vor den iterator-defs jetzt funktioniert, kann es stimmen, dass T gleichzeitig für den Typ (zB int) steht und dann auch noch für einen iterator&lt;int&gt;?</p>
</blockquote>
<p>Naja. Überleg dir mal, wenn du in einem std::vector suchen willst, oder auch in einem normalen Array. Dafür müsstest du jedesmal verschiedene Funktionen schreiben, ohne, dass sich der Algorithmus verändern würde.<br />
Die Standardbibliothek macht das genau so.<br />
Du kannst auch 2 Integer angeben, aber das wären schlichtweg unsinnige Parameter.</p>
<p><a href="http://www.cplusplus.com/reference/algorithm/find.html" rel="nofollow">http://www.cplusplus.com/reference/algorithm/find.html</a></p>
<p>Da siehst du, dass das der normale Weg ist. Wenn der Programmierer einfach nicht viel dabei überlegt, dann ist er selber schuld, respektive es kompiliert nicht, wenn kein Operator * definiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558552</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 03 Aug 2008 16:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 16:23:13 GMT]]></title><description><![CDATA[<blockquote>
<p>Also das typedef ist dazu da, um dem Compiler zu sagen, dass das kommende eine Typdefinition ist.</p>
</blockquote>
<p>Ich habs bisher nur in Verbindung Templates-&gt;Iteratoren gesehen und benutzt.<br />
Was sagt denn &quot;list&lt;T&gt;::iterator beg&quot; ohne ein davorgestelltes typename aus?</p>
<p>Das es generischer geht, als von mir geschrieben weiss ich. War nur als kleine Übung gedacht und dafür benötige ich jetzt keinen vector, deque, whatever.<br />
Und da du die Reference schon ansprichst, dort wird nicht für beide Typen der gleiche typename/class -Name benutzt, sondern einmal T und einmal Iterator.<br />
Und das war es ja, was mich an deinem Code verwundert hat!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558570</guid><dc:creator><![CDATA[this!=that]]></dc:creator><pubDate>Sun, 03 Aug 2008 16:23:13 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 16:25:58 GMT]]></title><description><![CDATA[<p>Jetzt versteh ich was du meinst. Es ist also erlaubt nur einen typename/class-Parameter, zb. T einzuführen und mit diesem überall zu arbeiten, wo etwas ersetzt werden kann, egal um was es sich handelt. Aber es muss natürlich die richtige Reihenfolge beim Aufruf beibehalten werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558573</guid><dc:creator><![CDATA[this!=that]]></dc:creator><pubDate>Sun, 03 Aug 2008 16:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 16:34:29 GMT]]></title><description><![CDATA[<p>this!=that schrieb:</p>
<blockquote>
<p>Jetzt versteh ich was du meinst. Es ist also erlaubt nur einen typename/class-Parameter, zb. T einzuführen und mit diesem überall zu arbeiten, wo etwas ersetzt werden kann, egal um was es sich handelt. Aber es muss natürlich die richtige Reihenfolge beim Aufruf beibehalten werden.</p>
</blockquote>
<p>Ein Template-Parameter hat immer genau einen Typ. Die verwenden dort zwei verschiedene Template-Parameter und überlassen dem Compiler die Arbeit Anhand der Parameter der Template-Funktion die Template-Parameter herauszufinden.</p>
<p>In deinem Fall brauchst du das typename davor, da der Compiler sonst annimmt, dass es sich bei iterator um eine Variable und nicht um einen Typ handelt. Wobei ich eigentlich glaube, dass er das innerhalb der Parameterliste nicht tut, aber anders kann ich mir deinen Fehler gerade nicht erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558578</guid><dc:creator><![CDATA[Quark wie Käse]]></dc:creator><pubDate>Sun, 03 Aug 2008 16:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to eigener find-Algorithmus als Template... on Sun, 03 Aug 2008 16:38:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename Iter, typename T&gt;
bool myfind(Iter const &amp;begin, Iter const &amp;end, T const &amp;val);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1558582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558582</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 03 Aug 2008 16:38:33 GMT</pubDate></item></channel></rss>