problem using hash_set with string with g++

Amit Mehrotra amehrotr@mail.vlsi.csl.uiuc.edu
Fri Dec 31 14:08:00 GMT 1999


If I compile the following program hashTest.cc with no options, i.e.,
Type = int, it compiles and runs without any problems. If I compile it
with
g++ -DSTRING_TYPE hashTest.cc
i.e., Type = string, it give me an error at genericHash::const_iterator.
I can't understand why this is the case?

Amit
---------------------------hashTest.cc-------------------------------
#include <hash_set>
#ifdef STRING_TYPE
#include <string>
typedef string Type;
#else
typedef int Type;
#endif
typedef hash_set<Type> genericHash;
void lookup(const genericHash &Set, const Type &word) {
    genericHash::const_iterator it = Set.find(word);
    cout << word << ": " << (it != Set.end() ? "present" : "not
present") << endl;
}
int main() {
    genericHash Set;
#ifdef STRING_TYPE
    Set.insert("oof"); Set.insert("goof"); Set.insert("hoof");
lookup(Set, "goof"); lookup(Set, "foof");
#else
    Set.insert(1); Set.insert(5); Set.insert(6); lookup(Set, 1);
lookup(Set, 9);
#endif
}
----------------------errors with g++
-DSTRING_TYPE----------------------
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/../../../../include/g++-3/stl_hashtable.h:
In method `size_t
hashtable<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>,basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>,hash<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,_Identity<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,equal_to<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,allocator<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
> > >::_M_bkt_num_key(const Type &, unsigned int) const':
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/../../../../include/g++-3/stl_hashtable.h:521:
instantiated from
`hashtable<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>,basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>,hash<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,_Identity<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,equal_to<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,allocator<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
> > >::_M_bkt_num_key(const Type &) const'
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/../../../../include/g++-3/stl_hashtable.h:471:
instantiated from
`hashtable<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>,basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>,hash<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,_Identity<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,equal_to<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,allocator<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
> > >::find(const Type &) const'
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/../../../../include/g++-3/stl_hash_set.h:179:
instantiated from
`hash_set<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>,hash<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,equal_to<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>
>,allocator<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
> > >::find(const Type &) const'
hashTest.cc:10:   instantiated from here
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/../../../../include/g++-3/stl_hashtable.h:531:
no match for call to `(const
hash<basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
> >) (const
basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
> &)'




More information about the Gcc-help mailing list