<?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[[solved] STL-algorithm-Funktionen bei STL-Listen mit Zeigern auf Objekte]]></title><description><![CDATA[<p>Hallo miteinander,</p>
<p>ich hab in einem Programm mehrere STL-Listen in denen ich Zeiger auf Objekte verschiedener Klassen verwalte. z.B.</p>
<pre><code class="language-cpp">std::list&lt;Klasse1 *&gt; klasse1Liste;
std::list&lt;Klasse2 *&gt; klasse2Liste;
</code></pre>
<p>In all diesen Klassen habe ich den Operator 'operator ==' überladen damit er ein Objekt mit einem int vergleichen kann (d.h. alle Objekte haben einen int-Schlüssel).</p>
<p>Ich möchte nun in den Listen nach einem bestimmten Schlüssel suchen. Dazu möchte ich die STL-algorithm Funktionen verwenden.</p>
<p>Wenn ich mit z.B.</p>
<pre><code class="language-cpp">iter = std::find(klass1Liste.begin(), klass1Liste.end(), iKey);
</code></pre>
<p>arbeite funktioniert es nicht, da in der List ja nur Zeiger auf die Objekte stehen.</p>
<p>Die zweite Variante von 'find', in der ich eine Vergleichsfunktion übergeben kann, akzeptiert nur einen parameter (oder??? <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="😕"
    /> ). z.B</p>
<pre><code class="language-cpp">bool compare(Klasse1 *k1)
{
    return *k1==iKey;
}
</code></pre>
<pre><code class="language-cpp">iter = std::find(klasse1Liste.begin(), klasse1Liste.end(), compare);
</code></pre>
<p>ich müsste also iKey als globale Variable anlegen (oder? <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="😕"
    /> ). Außerdem müsste ich für jede Klasse eine separate compare-Funktion schreiben, obwohl die derefferenzierung des Zeigers jedes mal die gleiche ist. Wenn ich nämlich folgende Vorlagen-Funktion erzeuge,</p>
<pre><code class="language-cpp">template&lt;class T&gt; bool compare(T k1)
{
    return *k1 == iKey;
}
</code></pre>
<p>bekomme ich eine Fehlermeldungen der Art</p>
<blockquote>
<p>c:\shapefcts.cpp(122) : error C2896: &quot;_FwdIt1 std::find_first_of(_FwdIt1,_FwdIt1,_FwdIt2,_FwdIt2,_Pr)&quot;: Funktions-template &quot;bool match(T,int)&quot; kann nicht als Funktionsargument verwendet werden.<br />
c:\shapefcts.cpp(21): Siehe Deklaration von 'match'<br />
c:\shapefcts.cpp(122) : error C2784: &quot;_FwdIt1 std::find_first_of(_FwdIt1,_FwdIt1,_FwdIt2,_FwdIt2,_Pr)&quot;: template-Argument für &quot;_FwdIt2&quot; konnte nicht von &quot;std::list&lt;_Ty&gt;::_Iterator&lt;_Secure_validation&gt;&quot; hergeleitet werden.<br />
with<br />
[<br />
_Ty=int,<br />
_Secure_validation=true<br />
]<br />
c:\programme\microsoft visual studio 8\vc\include\algorithm(578): Siehe Deklaration von 'std::find_first_of'<br />
c:\shapefcts.cpp(122) : error C2780: '_FwdIt1 std::find_first_of(_FwdIt1,_FwdIt1,_FwdIt2,_FwdIt2)': Erwartet 4 Argumente - 5 unterstützt<br />
c:\programme\microsoft visual studio 8\vc\include\algorithm(549): Siehe Deklaration von 'std::find_first_of'</p>
</blockquote>
<p>Habe es, wie aus der Fehlermeldung ersichtlich, auch mit 'find_first_of' probiert um die globale Variable los zu werden. Dann bleibt aber immer noch, dass ich für jede Klasse eine separate compare-Funktion schreiben muss.</p>
<p>Hat jemand eine Idee oder einen Hinweis, wie dies 'sauber' zu lösen geht?</p>
<p>Herzlichen Dank im Voraus, für jegliche Hilfestellung.</p>
<p>Viele Grüße<br />
Knecht</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156508/solved-stl-algorithm-funktionen-bei-stl-listen-mit-zeigern-auf-objekte</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 19:43:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156508.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Aug 2006 10:46:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [solved] STL-algorithm-Funktionen bei STL-Listen mit Zeigern auf Objekte on Thu, 17 Aug 2006 12:54:48 GMT]]></title><description><![CDATA[<p>Hallo miteinander,</p>
<p>ich hab in einem Programm mehrere STL-Listen in denen ich Zeiger auf Objekte verschiedener Klassen verwalte. z.B.</p>
<pre><code class="language-cpp">std::list&lt;Klasse1 *&gt; klasse1Liste;
std::list&lt;Klasse2 *&gt; klasse2Liste;
</code></pre>
<p>In all diesen Klassen habe ich den Operator 'operator ==' überladen damit er ein Objekt mit einem int vergleichen kann (d.h. alle Objekte haben einen int-Schlüssel).</p>
<p>Ich möchte nun in den Listen nach einem bestimmten Schlüssel suchen. Dazu möchte ich die STL-algorithm Funktionen verwenden.</p>
<p>Wenn ich mit z.B.</p>
<pre><code class="language-cpp">iter = std::find(klass1Liste.begin(), klass1Liste.end(), iKey);
</code></pre>
<p>arbeite funktioniert es nicht, da in der List ja nur Zeiger auf die Objekte stehen.</p>
<p>Die zweite Variante von 'find', in der ich eine Vergleichsfunktion übergeben kann, akzeptiert nur einen parameter (oder??? <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="😕"
    /> ). z.B</p>
<pre><code class="language-cpp">bool compare(Klasse1 *k1)
{
    return *k1==iKey;
}
</code></pre>
<pre><code class="language-cpp">iter = std::find(klasse1Liste.begin(), klasse1Liste.end(), compare);
</code></pre>
<p>ich müsste also iKey als globale Variable anlegen (oder? <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="😕"
    /> ). Außerdem müsste ich für jede Klasse eine separate compare-Funktion schreiben, obwohl die derefferenzierung des Zeigers jedes mal die gleiche ist. Wenn ich nämlich folgende Vorlagen-Funktion erzeuge,</p>
<pre><code class="language-cpp">template&lt;class T&gt; bool compare(T k1)
{
    return *k1 == iKey;
}
</code></pre>
<p>bekomme ich eine Fehlermeldungen der Art</p>
<blockquote>
<p>c:\shapefcts.cpp(122) : error C2896: &quot;_FwdIt1 std::find_first_of(_FwdIt1,_FwdIt1,_FwdIt2,_FwdIt2,_Pr)&quot;: Funktions-template &quot;bool match(T,int)&quot; kann nicht als Funktionsargument verwendet werden.<br />
c:\shapefcts.cpp(21): Siehe Deklaration von 'match'<br />
c:\shapefcts.cpp(122) : error C2784: &quot;_FwdIt1 std::find_first_of(_FwdIt1,_FwdIt1,_FwdIt2,_FwdIt2,_Pr)&quot;: template-Argument für &quot;_FwdIt2&quot; konnte nicht von &quot;std::list&lt;_Ty&gt;::_Iterator&lt;_Secure_validation&gt;&quot; hergeleitet werden.<br />
with<br />
[<br />
_Ty=int,<br />
_Secure_validation=true<br />
]<br />
c:\programme\microsoft visual studio 8\vc\include\algorithm(578): Siehe Deklaration von 'std::find_first_of'<br />
c:\shapefcts.cpp(122) : error C2780: '_FwdIt1 std::find_first_of(_FwdIt1,_FwdIt1,_FwdIt2,_FwdIt2)': Erwartet 4 Argumente - 5 unterstützt<br />
c:\programme\microsoft visual studio 8\vc\include\algorithm(549): Siehe Deklaration von 'std::find_first_of'</p>
</blockquote>
<p>Habe es, wie aus der Fehlermeldung ersichtlich, auch mit 'find_first_of' probiert um die globale Variable los zu werden. Dann bleibt aber immer noch, dass ich für jede Klasse eine separate compare-Funktion schreiben muss.</p>
<p>Hat jemand eine Idee oder einen Hinweis, wie dies 'sauber' zu lösen geht?</p>
<p>Herzlichen Dank im Voraus, für jegliche Hilfestellung.</p>
<p>Viele Grüße<br />
Knecht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119060</guid><dc:creator><![CDATA[Knecht]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] STL-algorithm-Funktionen bei STL-Listen mit Zeigern auf Objekte on Thu, 17 Aug 2006 10:50:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct compare
{
  compare( int key ) : key( key ) {}
  bool operator()( Klasse1* k1 )
  {
     return *k1 == key;
  }
  int key;
}
iter = std::find(klasse1Liste.begin(), klasse1Liste.end(), compare( 10));
</code></pre>
<p>Sowas nennt sich functor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119063</guid><dc:creator><![CDATA[User--]]></dc:creator><pubDate>Thu, 17 Aug 2006 10:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] STL-algorithm-Funktionen bei STL-Listen mit Zeigern auf Objekte on Thu, 17 Aug 2006 12:36:39 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Hilfe. Bin leider trotzdem noch nicht auf des Rätsels Lösung gekommen, den wenn ich es wie von User-- vorgeschlagen mache bekomme ich folgende Fehlermeldung</p>
<blockquote>
<p>c:\programme\microsoft visual studio 8\vc\include\algorithm(40) : error C2679: Binärer Operator '==': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'const compare' akzeptiert (oder keine geeignete Konvertierung möglich)<br />
kann 'eingebauter C++ Operator==(Math::Lagrange *, Math::Lagrange *)' sein<br />
c:\lagrange.h(27): oder &quot;bool Math::operator ==(const Math::Lagrange &amp;,const Math::Lagrange &amp;)&quot; [bei argumentbezogenem Lookup gefunden]<br />
c:\lagrange.h(28): oder &quot;bool Math::operator ==(int,const Math::Lagrange &amp;)&quot; [bei argumentbezogenem Lookup gefunden]<br />
c:\quadratur.h(23): oder &quot;bool Math::operator ==(const Math::quadrature &amp;,const Math::quadrature &amp;)&quot; [bei argumentbezogenem Lookup gefunden]<br />
c:\quadratur.h(24): oder &quot;bool Math::operator ==(int,const Math::quadrature &amp;)&quot; [bei argumentbezogenem Lookup gefunden]<br />
c:\quadratur.h(25): oder &quot;bool Math::operator ==(const Math::quadrature &amp;,int)&quot; [bei argumentbezogenem Lookup gefunden]<br />
bei Anpassung der Argumentliste '(Math::Lagrange *, const compare)'<br />
c:\programme\microsoft visual studio 8\vc\include\algorithm(74): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;_InIt std::_Find&lt;std::list&lt;_Ty&gt;::_Iterator&lt;_Secure_validation&gt;,compare&gt;(_InIt,_InIt,const compare &amp;)&quot;.<br />
with<br />
[<br />
_InIt=std::list&lt;Math::Lagrange *&gt;::_Iterator&lt;false&gt;,<br />
_Ty=Math::Lagrange *,<br />
_Secure_validation=false<br />
]<br />
c:\shapefcts.cpp(90): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;_InIt std::find&lt;std::list&lt;_Ty&gt;::_Iterator&lt;_Secure_validation&gt;,compare&gt;(_InIt,_InIt,const compare &amp;)&quot;.<br />
with<br />
[<br />
_InIt=std::list&lt;Math::Lagrange *&gt;::_Iterator&lt;true&gt;,<br />
_Ty=Math::Lagrange *,<br />
_Secure_validation=true<br />
]</p>
</blockquote>
<p>D.h. mein Compiler verwendet die erste Version von find obwohl er eigentlich die zweite verwenden sollte.<br />
Was habe ich übersehen? Wie bekomme ich meinen Kompiler dazu die zweite Version zu verwenden?</p>
<p>Nochmals herzlichen Dank.</p>
<p>Viele Grüße<br />
Knecht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119149</guid><dc:creator><![CDATA[Knecht]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] STL-algorithm-Funktionen bei STL-Listen mit Zeigern auf Objekte on Thu, 17 Aug 2006 12:44:38 GMT]]></title><description><![CDATA[<p>Es gibt nur eine Variante von find. Die andere heisst find_if.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119163</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] STL-algorithm-Funktionen bei STL-Listen mit Zeigern auf Objekte on Thu, 17 Aug 2006 12:54:21 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Es gibt nur eine Variante von find. Die andere heisst find_if.</p>
</blockquote>
<p>Sorry!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> Natürlich musse es find_if heißen.</p>
<p>Herzlichen Dank nochmal</p>
<p>Viele Grüße<br />
Knecht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119173</guid><dc:creator><![CDATA[Knecht]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:54:21 GMT</pubDate></item></channel></rss>