Hallo,
ich habe eine Classe CDefinition und will einen Container(hash_set) mit den Pointer aof Definitions aufbauen.
In Class CDefinitionContainer header:
private:
stdext::hash_set<CDefinition*,definitionhasher> m_theDefinitions;
und in der .cpp versuche ich den Iterator aufzuruffen(darauf bezieht sich auch die Fehlermeldung):
typedef hash_set<CDefinition*,definitionhasher>::iterator iter_def;
In Class CDefinition
bool operator<( CDefinition const& a){
return this->m_strSymbolName < a.m_strSymbolName ;
}
und die definitionhasher schaut so aus:
class definitionhasher : public stdext::hash_compare<CDefinition*>
{
public:
size_t operator() (const CDefinition* &s) const{
size_t h = 0;
std::string::const_iterator p, p_end;
for(p = s->m_strSymbolName.begin(), p_end = s->m_strSymbolName.end(); p != p_end; ++p)
{
h = 31 * h + (*p);
}
return h;
}
bool operator() (const CDefinition* &s1, const CDefinition* &s2) const
{
return s1->m_strSymbolName < s2->m_strSymbolName;
}
};
Die HashFunktion wird über die Variable DefinitionName aufgebaut, der einen String is. Es scheint jedoch dass ich problemmen mit dem < Operator habe.
die 1-te VS.Net Fehlermeldung schaut so aus:
c:\Documents and Settings\Gerhard\My Documents\Visual Studio Projects\diplom\hashing\CDefinitionContainer.cpp(67): error C2676: binary '<' : 'iter_def' does not define this operator or a conversion to a type acceptable to the predefined operator
ich habe eine Classe CDefinition und will einen Container(hash_set) mit den Pointer aof Definitions aufbauen.
In Class CDefinitionContainer header:
private:
stdext::hash_set<CDefinition*,definitionhasher> m_theDefinitions;
und in der .cpp versuche ich den Iterator aufzuruffen(darauf bezieht sich auch die Fehlermeldung):
typedef hash_set<CDefinition*,definitionhasher>::iterator iter_def;
In Class CDefinition
bool operator<( CDefinition const& a){
return this->m_strSymbolName < a.m_strSymbolName ;
}
und die definitionhasher schaut so aus:
class definitionhasher : public stdext::hash_compare<CDefinition*>
{
public:
size_t operator() (const CDefinition* &s) const{
size_t h = 0;
std::string::const_iterator p, p_end;
for(p = s->m_strSymbolName.begin(), p_end = s->m_strSymbolName.end(); p != p_end; ++p)
{
h = 31 * h + (*p);
}
return h;
}
bool operator() (const CDefinition* &s1, const CDefinition* &s2) const
{
return s1->m_strSymbolName < s2->m_strSymbolName;
}
};
Die HashFunktion wird über die Variable DefinitionName aufgebaut, der einen String is. Es scheint jedoch dass ich problemmen mit dem < Operator habe.
die 1-te VS.Net Fehlermeldung schaut so aus:
c:\Documents and Settings\Gerhard\My Documents\Visual Studio Projects\diplom\hashing\CDefinitionContainer.cpp(67): error C2676: binary '<' : 'iter_def' does not define this operator or a conversion to a type acceptable to the predefined operator