<?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[prob mit parameter]]></title><description><![CDATA[<p>hab ein problem mit den parameter<br />
original:<br />
<a href="http://www.zfx.info/Tutorials.php?ID=79" rel="nofollow">http://www.zfx.info/Tutorials.php?ID=79</a></p>
<pre><code class="language-cpp">enum SortType {SORT_QUICK};

   template&lt;class Template&gt;
   class CSort {
         public:
         CSort() {}
         ~CSort() {}
         static bool Compare(int &amp; i1, int &amp; i2) {
              if(i1 &gt; i2) {
                    return true;
              }
              return false;
         }

         static void Sort(std::vector&lt;Template&gt; &amp; List, bool (*Compare)(Template &amp; r1, Template &amp; r2), SortType Type);

         private:
         static void QuickSort(std::vector&lt;Template&gt; &amp; List, unsigned long dwLow, unsigned long dwHigh, bool (*Compare)(Template &amp; r1, Template &amp; r2)){
                //Die Indizes in das zu sortierende Array initialisieren
                int iTop = dwLow;
                int iBottom = dwHigh - 1;
                int iPartitionIndex = 0;
                int iPartitionValue = 0;

                //Wenn Low &gt;= High, muss nichts getan werden (wie auch...)
                if (dwLow &lt; dwHigh) {
                          //Wenn die Elemente direkt hintereinander liegen, ist die unterste Sortierebene erreicht
                          if (dwHigh == (dwLow + 1)) {
                                     if(Compare(List[dwLow], List[dwHigh])) {
                                                             SwapElements(List, dwHigh, dwLow);
                                     }
                          }else {
                          //Ein Partition Element auswählen und an die letzte Position im Array schieben
                          //(damit man es in Ruhe lassen kann)
                          iPartitionIndex = static_cast&lt;int&gt;((dwLow + dwHigh) / 2);
                          iPartitionValue = List[iPartitionIndex];
                          SwapElements(List, dwHigh, iPartitionIndex);
                          do {
                             //Den Top Index hochzählen, bis man ein Element gefunden hat, das größer ist,
                             //als das Partition Element
                             while (!Compare(List[iTop], iPartitionValue) &amp;&amp; (iTop &lt;= iBottom)) {
                                   iTop++;
                             }
                             //Den Bottom Index herunterzählen, bis man ein Element gefunden hat, das kleiner 
                             //ist als das Partition Element
                             while (Compare(List[iBottom], iPartitionValue) &amp;&amp; (iTop &lt;= iBottom)) {
                                   iBottom--;
                             }
                             //Wenn die Indizes sich nicht getroffen haben, werden die Elemente vertauscht
                             if (iTop &lt; iBottom) {
	                            SwapElements(List, iTop, iBottom);
                             }
                          } while (iTop &lt; iBottom);

                          //Das Partition Element wird auf seine finale Position gesetzt
                          SwapElements(List, iTop, dwHigh);

                          //Und die Funktion für die Teile rechts und links des Partition Elements aufgerufen
                          QuickSort(dwLow, iTop - 1, Compare);
                          QuickSort(iTop + 1, dwHigh, Compare);
                          }
                }
         }
         static void SwapElements(std::vector&lt;Template&gt; &amp; List, unsigned long dwFirstIndex, unsigned long dwSecondIndex) {
                Template Temp;
                Temp = List[dwFirstIndex];
                List[dwFirstIndex] = List[dwSecondIndex];
                List[dwSecondIndex] = Temp;
         }
</code></pre>
<p>wenn ich jetzt die funktion aufrufe kommt dieser fehler</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; x;
CSort&lt;int&gt;::Sort(x,true, SORT_QUICK); //ich weiß nicht so genau was ich beim bool eingeben muss
</code></pre>
<p>fehlermeldung:<br />
no matching function for call to `CSort&lt;int&gt;::Sort(std::vector&lt;int, std::allocator&lt;int&gt; &gt;&amp;, bool, SortType)'</p>
<p>candidates are: static void CSort&lt;Template&gt;::Sort(std::vector&lt;Template, std::allocator&lt;_CharT&gt; &gt;&amp;, bool (*)(Template&amp;, Template&amp;), SortType) [with Template = int]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198760/prob-mit-parameter</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 16:01:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198760.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Nov 2007 10:28:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to prob mit parameter on Sun, 25 Nov 2007 10:28:59 GMT]]></title><description><![CDATA[<p>hab ein problem mit den parameter<br />
original:<br />
<a href="http://www.zfx.info/Tutorials.php?ID=79" rel="nofollow">http://www.zfx.info/Tutorials.php?ID=79</a></p>
<pre><code class="language-cpp">enum SortType {SORT_QUICK};

   template&lt;class Template&gt;
   class CSort {
         public:
         CSort() {}
         ~CSort() {}
         static bool Compare(int &amp; i1, int &amp; i2) {
              if(i1 &gt; i2) {
                    return true;
              }
              return false;
         }

         static void Sort(std::vector&lt;Template&gt; &amp; List, bool (*Compare)(Template &amp; r1, Template &amp; r2), SortType Type);

         private:
         static void QuickSort(std::vector&lt;Template&gt; &amp; List, unsigned long dwLow, unsigned long dwHigh, bool (*Compare)(Template &amp; r1, Template &amp; r2)){
                //Die Indizes in das zu sortierende Array initialisieren
                int iTop = dwLow;
                int iBottom = dwHigh - 1;
                int iPartitionIndex = 0;
                int iPartitionValue = 0;

                //Wenn Low &gt;= High, muss nichts getan werden (wie auch...)
                if (dwLow &lt; dwHigh) {
                          //Wenn die Elemente direkt hintereinander liegen, ist die unterste Sortierebene erreicht
                          if (dwHigh == (dwLow + 1)) {
                                     if(Compare(List[dwLow], List[dwHigh])) {
                                                             SwapElements(List, dwHigh, dwLow);
                                     }
                          }else {
                          //Ein Partition Element auswählen und an die letzte Position im Array schieben
                          //(damit man es in Ruhe lassen kann)
                          iPartitionIndex = static_cast&lt;int&gt;((dwLow + dwHigh) / 2);
                          iPartitionValue = List[iPartitionIndex];
                          SwapElements(List, dwHigh, iPartitionIndex);
                          do {
                             //Den Top Index hochzählen, bis man ein Element gefunden hat, das größer ist,
                             //als das Partition Element
                             while (!Compare(List[iTop], iPartitionValue) &amp;&amp; (iTop &lt;= iBottom)) {
                                   iTop++;
                             }
                             //Den Bottom Index herunterzählen, bis man ein Element gefunden hat, das kleiner 
                             //ist als das Partition Element
                             while (Compare(List[iBottom], iPartitionValue) &amp;&amp; (iTop &lt;= iBottom)) {
                                   iBottom--;
                             }
                             //Wenn die Indizes sich nicht getroffen haben, werden die Elemente vertauscht
                             if (iTop &lt; iBottom) {
	                            SwapElements(List, iTop, iBottom);
                             }
                          } while (iTop &lt; iBottom);

                          //Das Partition Element wird auf seine finale Position gesetzt
                          SwapElements(List, iTop, dwHigh);

                          //Und die Funktion für die Teile rechts und links des Partition Elements aufgerufen
                          QuickSort(dwLow, iTop - 1, Compare);
                          QuickSort(iTop + 1, dwHigh, Compare);
                          }
                }
         }
         static void SwapElements(std::vector&lt;Template&gt; &amp; List, unsigned long dwFirstIndex, unsigned long dwSecondIndex) {
                Template Temp;
                Temp = List[dwFirstIndex];
                List[dwFirstIndex] = List[dwSecondIndex];
                List[dwSecondIndex] = Temp;
         }
</code></pre>
<p>wenn ich jetzt die funktion aufrufe kommt dieser fehler</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; x;
CSort&lt;int&gt;::Sort(x,true, SORT_QUICK); //ich weiß nicht so genau was ich beim bool eingeben muss
</code></pre>
<p>fehlermeldung:<br />
no matching function for call to `CSort&lt;int&gt;::Sort(std::vector&lt;int, std::allocator&lt;int&gt; &gt;&amp;, bool, SortType)'</p>
<p>candidates are: static void CSort&lt;Template&gt;::Sort(std::vector&lt;Template, std::allocator&lt;_CharT&gt; &gt;&amp;, bool (*)(Template&amp;, Template&amp;), SortType) [with Template = int]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409708</guid><dc:creator><![CDATA[kiba91]]></dc:creator><pubDate>Sun, 25 Nov 2007 10:28:59 GMT</pubDate></item><item><title><![CDATA[Reply to prob mit parameter on Sun, 25 Nov 2007 12:03:21 GMT]]></title><description><![CDATA[<p>Du mußt dort nicht einen logischen Wert übergeben, sondern einen Zeiger auf eine Funktion, die den Rückgabewert bool hat (z.B. die Funktion Compare). Mit Hilfe dieser Funktion wird dann der Vergleich durchgeführt.</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; x;
CSort&lt;int&gt;::Sort(x, &amp;CSort&lt;int&gt;::Compare, SORT_QUICK);
</code></pre>
<p>Aber das steht ja auch im Tutorial so (bzw. dort ist es eine freistehende Funktion, was auch mehr Sinn macht als sie in der Template-Klasse 'CSort' anzugeben - zumal du sie dort ohne Benutzung des Parameters 'Template' definierst hast.)</p>
<p>Und so gelungen ist die Klasse übrigens nicht, da sie einige Unschönheiten enthält (z.B. unterschiedliche Datentypen: int &lt;-&gt; DWORD).</p>
<p>Wenn eine Sortierfunktion benötigt wird, würde ich immer zuerst eine der Algorithmen aus der Standard-C++ Bibliothek verwenden, z.B. std::sort() oder std::stable_sort() etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409746</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sun, 25 Nov 2007 12:03:21 GMT</pubDate></item><item><title><![CDATA[Reply to prob mit parameter on Mon, 26 Nov 2007 13:45:41 GMT]]></title><description><![CDATA[<p>ok hab das prob jetzt gelöst<br />
thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1410334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1410334</guid><dc:creator><![CDATA[kiba91]]></dc:creator><pubDate>Mon, 26 Nov 2007 13:45:41 GMT</pubDate></item></channel></rss>