Re: CMap and struct
Vahid wrote:
I have a struct in my program defined as below:
struct SDataType {
unsigned long nNamespace;
unsigned long nDataType;
SDataType& operator=(SDataType& s2) { nNamespace = s2.nNamespace;
nDataType = s2.nDataType; return *this; }
bool operator==(SDataType s2) { return ((nNamespace ==
s2.nNamespace) && (nDataType == s2.nDataType)); }
};
And I have defined a CMap variable as below:
CMap<SDataType, SDataType&, unsigned int, unsigned int> map;
However, I get this compilation error:
error C2679: binary '=' : no operator found which takes a right-hand
operand of type 'const SDataType' (or there is no acceptable
conversion)
which refers to this portion of "template<class KEY, class ARG_KEY,
class VALUE, class ARG_VALUE>
void CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::GetNextAssoc(POSITION&
rNextPosition, KEY& rKey, VALUE& rValue) const" function in
afxtempl.h:
rKey = pAssocRet->key;
Does anyone know how this problem can be resolved? I'd appreciate your
help.
Vahid:
As others have noted you have some problems with the signatures of
operator =() and operator ==().
As to HashKey(), you probably don't really need a hashed map, in which
case you could use std::map from the standard library (std::map is a
tree-based map, not a hash map).
Personally I never use the MFC collection classes. The standard libraray
ones are just much better designed, IMHO. Most recent C++
implementations also have hash_map, if you really need a hashed map.
--
David Wilkinson
Visual C++ MVP