Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

1

19.05.2009, 18:33

Problem mit std::find

Hallo,

folgende Situation:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class C
{
    // [...]

 
public:
    bool operator== (const C* bp) const
    {
        return (*bp) == *this;
    }
    bool operator== (const C& bp) const
    {
        return bp.getX () == getX ();
    }
}
  
class D
{
    // [...]

 
private:
    std::vector <C> m_v;
 
public:
    bool check (const C& bp) const
    {
        return std::find (m_v.begin (), m_v.end (), bp) != m_v.end ();
    }
}



Der g++ liefert folgenden Fehler für die Funktion D::check

Zitat

/usr/include/c++/4.2/bits/stl_algo.h|208|Fehler: no match für »operator==« in »__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const C*, _Container = std::vector<C, std::allocator<C> >]() == __val«


Warum? Was mache ich falsch?

Danke im Voraus
<< an dieser Stelle ist eine Signatur verstorben >>

2

19.05.2009, 21:51

Bei mir kompiliert der Code, vielleicht hast du dein Problem nicht richtig abstrahiert.

Ich würde allerdings Operatoren wie ==, >=, aber auch +, -, * grundsätzlich als globale Funktionen implementieren, während Operatoren wie = und +=, die Zugriff auf Member haben müssen, als Memberfunktionen definiert sind.

Weshalb bietest du überhaupt eine Vergleichsfunktion für einen Zeiger an? Wenn schon, würde ich die eben global machen, damit du auch eine Variante anbieten kannst, bei der der Zeiger als erster Operand übergeben wird.