469,646 Members | 1,784 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,646 developers. It's quick & easy.

Hash map question.

I've searched google for help with this one, but I haven't found it yet.
What I want is a hash map this looks like:
__gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;

ArcNode is a class. It looks something like this:

class ArcNode
{
private:
// communication objects
int fdSocket;
public:
ArcNode();
~ArcNode();
int write(string);
int read(string&);
int open(string);
int state();

};

But when I try to compile I get:
In file included from main.cpp:3:
/usr/include/c++/3.2.2/bits/stl_pair.h: In instantiation of
`std::pair<const std::string, ArcNode&>':
/usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
`std::_Select1st<std::pair<const std::string, ArcNode&> >'
/usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
`__gnu_cxx::hashtable<std::pair<const std::string, ArcNode&>,
std::string, __gnu_cxx::hash<std::string>,
std::_Select1st<std::pair<const std::string, ArcNode&> >,
std::equal_to<std::string>, std::allocator<ArcNode&> >'
/usr/include/c++/3.2.2/ext/hash_map:101: instantiated from
`__gnu_cxx::hash_map<std::string, ArcNode&,
__gnu_cxx::hash<std::string>, std::equal_to<std::string>,
std::allocator<ArcNode&> >'
loggerbase.h:48: instantiated from here
/usr/include/c++/3.2.2/bits/stl_pair.h:84: forming reference to
reference type
`ArcNode&'
/usr/include/c++/3.2.2/ext/hash_map: In instantiation of
`__gnu_cxx::hash_map<std::string, ArcNode&,
__gnu_cxx::hash<std::string>, std::equal_to<std::string>,
std::allocator<ArcNode&> >':
loggerbase.h:48: instantiated from here
/usr/include/c++/3.2.2/ext/hash_map:182: forming reference to reference
type `
ArcNode&'
make: *** [logger] Error 1

I don't understand the reference to reference error message. Can
someone tell me what I'm doing wrong. A pointer to a tutorial that
discusses how to put objects into a hash_map would also be helpful.

Thanks,
Jim.

--
Jim Lynch
k4***@qsl.net

Jul 22 '05 #1
3 2434
Jim Lynch wrote:
I've searched google for help with this one, but I haven't found it
yet. What I want is a hash map this looks like:
__gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;

<snip>

"hash_map" is not Standard C++. Please consult a group for your library.

- Pete
Jul 22 '05 #2
Jim Lynch wrote:
I've searched google for help with this one, but I haven't found it yet.
What I want is a hash map this looks like:
__gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;
What you seem to have instead is
`__gnu_cxx::hash_map<std::string, ArcNode&,
__gnu_cxx::hash<std::string>, std::equal_to<std::string>,
std::allocator<ArcNode&> >'


(I might be wrong about this; you didn't post your code and I don't know
the gnu hash_map implementation well enough to be able to say for sure
that it doesn't go around adding ampersands willy-nilly like that. I'd
be surprised though.)

Don't use a reference type as the second template argument. Reference
types do not model the concepts required (Assignable for a start).

Ideally you could read about this at, for example,
http://www.sgi.com/tech/stl/PairAsso...Container.html

Perhaps best not to take the information from there too seriously in
this case - the basic situation appears to be:

(i) Pair Associative Container is a refinement of Container;
(ii) The value_type of a Container is required to be Assignable;
(iii) The value_type of a Pair Associative Container is required
to be std::pair <const key_type, data_type>;
(iv) std::pair <const key_type, data_type> is not Assignable.

Therefore 2+2=5, green is pink, and main returns void, QED.

--
Regards,
Buster.
Jul 22 '05 #3
Jim Lynch wrote:
I've searched google for help with this one, but I haven't found it yet.
What I want is a hash map this looks like:
__gnu_cxx::hash_map<string, ArcNode> ArcNodeMap;

Try std::hash_map<std::string, ArcNode> ArcNodeMap;

Although hash_map is not part of the STL (as approved by the standard),
I know some implementations include it in this namespace. Give it a try.
ArcNode is a class. It looks something like this:

class ArcNode
{
private:
// communication objects
int fdSocket;
public:
ArcNode();
~ArcNode();
int write(string);
int read(string&);
int open(string);
int state();

};

But when I try to compile I get:
In file included from main.cpp:3:
/usr/include/c++/3.2.2/bits/stl_pair.h: In instantiation of
`std::pair<const std::string, ArcNode&>':
/usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
`std::_Select1st<std::pair<const std::string, ArcNode&> >'
/usr/include/c++/3.2.2/ext/stl_hashtable.h:266: instantiated from
`__gnu_cxx::hashtable<std::pair<const std::string, ArcNode&>,
std::string, __gnu_cxx::hash<std::string>,
std::_Select1st<std::pair<const std::string, ArcNode&> >,
std::equal_to<std::string>, std::allocator<ArcNode&> >'
/usr/include/c++/3.2.2/ext/hash_map:101: instantiated from
`__gnu_cxx::hash_map<std::string, ArcNode&,
__gnu_cxx::hash<std::string>, std::equal_to<std::string>,
std::allocator<ArcNode&> >'
loggerbase.h:48: instantiated from here
/usr/include/c++/3.2.2/bits/stl_pair.h:84: forming reference to
reference type
`ArcNode&'
/usr/include/c++/3.2.2/ext/hash_map: In instantiation of
`__gnu_cxx::hash_map<std::string, ArcNode&,
__gnu_cxx::hash<std::string>, std::equal_to<std::string>,
std::allocator<ArcNode&> >':
loggerbase.h:48: instantiated from here
/usr/include/c++/3.2.2/ext/hash_map:182: forming reference to reference
type `
ArcNode&'
make: *** [logger] Error 1


You need to post code here. This means that whatever you are trying to
do, it is trying to acquire a reference to a reference, which is illegal
in C++.

Jorge L.
Jul 22 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by R. Rajesh Jeba Anbiah | last post: by
8 posts views Thread by Michael B Allen | last post: by
2 posts views Thread by johnnyG | last post: by
12 posts views Thread by Arash Partow | last post: by
21 posts views Thread by Johan Tibell | last post: by
6 posts views Thread by raymond | last post: by
2 posts views Thread by =?Utf-8?B?TW91dGhPZk1hZG5lc3M=?= | last post: by
3 posts views Thread by digz | last post: by
5 posts views Thread by Jeff | last post: by
2 posts views Thread by joe shoemaker | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.