Hello, I am new in this forum and hope to get some answers here.

Some words about me: I am a programmer since 88, working with C++ Builder XE7, living in Germany/Berlin.


My first question is about the algorithm "find_if" in combination with classes.

The compilere says : "const TDummy&" can not initialised with "par<const TDummyKey, TDummy>"

What does this mean?

This is my class:

Code:
class TDummyKey {
public:
  int iID;

public:
  TDummyKey(int paID) {
    iID = paID;
    }

  TDummyKey const& operator = (TDummyKey const&);
  bool operator == (TDummyKey const&) const;
  bool operator != (TDummyKey const&) const;
  bool operator <  (TDummyKey const&) const;
  bool operator <= (TDummyKey const&) const;
  bool operator >  (TDummyKey const&) const;
  bool operator >= (TDummyKey const&) const;
  int   Compare(TDummyKey const&) const;
};


inline bool TDummyKey::operator == (TDummyKey const& RefVar) const {
    return Compare(RefVar) == 0;
  }

inline bool TDummyKey::operator != (TDummyKey const& RefVar) const {
    return Compare(RefVar) != 0;
  }

inline bool TDummyKey::operator <  (TDummyKey const& RefVar) const {
    return Compare(RefVar) < 0;
  }

inline bool TDummyKey::operator <= (TDummyKey const& RefVar) const {
    return Compare(RefVar) <= 0;
  }

inline bool TDummyKey::operator >  (TDummyKey const& RefVar) const {
    return Compare(RefVar) > 0;
  }

inline bool TDummyKey::operator >= (TDummyKey const& RefVar) const {
    return Compare(RefVar) >= 0;
  }

int TDummyKey::Compare(TDummyKey const& RefVar) const {

  if (iID < RefVar.iID)                         return -1;
  if (iID > RefVar.iID)                         return  1;

  return 0;
  }


class TDummy : public TDummyKey{
public:
  string strVarName;

public:
  TDummy(int paID, string paVarName) : TDummyKey(paID) {
    strVarName = paVarName;
    }

  TDummy const& operator = (TDummy const&);
  bool operator == (TDummy const&) const;
  bool operator != (TDummy const&) const;
  bool operator <  (TDummy const&) const;
  bool operator <= (TDummy const&) const;
  bool operator >  (TDummy const&) const;
  bool operator >= (TDummy const&) const;
  int   Compare(TDummy const&) const;
};


inline bool TDummy::operator == (TDummy const& RefVar) const {
    return Compare(RefVar) == 0;
  }

inline bool TDummy::operator != (TDummy const& RefVar) const {
    return Compare(RefVar) != 0;
  }

inline bool TDummy::operator <  (TDummy const& RefVar) const {
    return Compare(RefVar) < 0;
  }

inline bool TDummy::operator <= (TDummy const& RefVar) const {
    return Compare(RefVar) <= 0;
  }

inline bool TDummy::operator >  (TDummy const& RefVar) const {
    return Compare(RefVar) > 0;
  }

inline bool TDummy::operator >= (TDummy const& RefVar) const {
    return Compare(RefVar) >= 0;
  }

int TDummy::Compare(TDummy const& RefVar) const {

  if (strVarName < RefVar.strVarName)                         return -1;
  if (strVarName > RefVar.strVarName)                         return  1;

  return 0;
  }


typedef map<TDummyKey,TDummy>   MapDummy;
typedef MapDummy::iterator      ItMapDummy;
This is the needed function for find_if

Code:
namespace stuff {
  int iID=0;
  bool IsID (const TDummy& value) { return (value.iID == iID); }
}

This is my main-code:

Code:
  MapDummy mapDummy;
  TDummy   Dummy1(1, string("A"));
  TDummy   Dummy2(2, string("B"));
  TDummy   Dummy3(3, string("C"));

  mapDummy.insert (pair<TDummyKey, TDummy> (Dummy1, Dummy1));
  mapDummy.insert (pair<TDummyKey, TDummy> (Dummy2, Dummy2));
  mapDummy.insert (pair<TDummyKey, TDummy> (Dummy3, Dummy3));

  for (ItMapDummy it  = mapDummy.begin();
                  it != mapDummy.end();
                  ++it) {

    wostringstream os;
    os << it->first.iID << " : " << it->second.strVarName.c_str();
    cout << os.str().c_str();
    }



  stuff::iID = 2;
  find_if(mapDummy.begin(), mapDummy.end(), stuff::IsID);

  for (ItMapDummy it  = mapDummy.begin();
                  it != mapDummy.end();
                  ++it) {

    wostringstream os;
    os << it->first.iID << " : " << it->second.strVarName.c_str();
    cout << os.str().c_str();
    }


sincerly,
Necip