public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: hash_map error: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers
@ 2005-11-05  1:25 Ricardo Fodra
  2005-11-05  1:52 ` Alex J. Dam
  0 siblings, 1 reply; 4+ messages in thread
From: Ricardo Fodra @ 2005-11-05  1:25 UTC (permalink / raw)
  To: gcc-help

Having a similar problem here:

  std::set<Person>* _family
  ...
  set<Person>::reverse_iterator iter =
_family->rbegin();
  ++iter;
> iter->setName(NULL);

error: passing `const Person' as `this' argument of
`void Person::setName(char*)' discards qualifiers

Why is the compiler thinking *iter is a "const
Person"? _family is not const and I'm not using a
const_reverse_iterator, although there are some
const_iterator in other parts of the code.

For now I'll just cast the const Person to a Person:

((Person*)(&(*iter)))->setName(NULL);

But I'd like to know how to fix this.

    Ricardo, Brazil.


	



	
		
_______________________________________________________ 
Yahoo! Acesso Grátis: Internet rápida e grátis. 
Instale o discador agora!
http://br.acesso.yahoo.com/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: hash_map error: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers
  2005-11-05  1:25 hash_map error: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers Ricardo Fodra
@ 2005-11-05  1:52 ` Alex J. Dam
  0 siblings, 0 replies; 4+ messages in thread
From: Alex J. Dam @ 2005-11-05  1:52 UTC (permalink / raw)
  To: gcc-help

On Fri, Nov 04, 2005 at 10:25:03PM -0300, Ricardo Fodra wrote:
> Having a similar problem here:
> 
>   std::set<Person>* _family
>   ...
>   set<Person>::reverse_iterator iter =
> _family->rbegin();
>   ++iter;
> > iter->setName(NULL);
> 
> error: passing `const Person' as `this' argument of
> `void Person::setName(char*)' discards qualifiers
> 
> Why is the compiler thinking *iter is a "const
> Person"? _family is not const and I'm not using a
> const_reverse_iterator, although there are some
> const_iterator in other parts of the code.
> 

I think it's because you're not supposed to change the values stored
in a set.

Values are stored in a set using the operator<, so if you insert these
names in a set, in this order:

julia
amanda
gloria

The set will store them internally like this, for fast retrieval:

amanda
gloria
julia

What if you change the first entry (amanda) to something else?  The
set will get lost: it will not be able to access its elements
properly.  The same happens to std::map.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: hash_map error: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers  passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers
  2003-05-13 14:13 buggy
@ 2003-05-13 18:05 ` LLeweLLyn Reese
  0 siblings, 0 replies; 4+ messages in thread
From: LLeweLLyn Reese @ 2003-05-13 18:05 UTC (permalink / raw)
  To: buggy; +Cc: gcc-help

<buggy@hetnet.nl> writes:

> Have you ever seen this error?,
> 
>  it means that I pass a pointer to a constant object out of it's protected context. Yes I cast it down to a normal pointer indeed. The pointer is actually casted to an integer. I'm keeping a hash of memory adresses with 
> the adresses of kopies of the objects these adresses refer too. So I do not alter this const pointer. Here is the code:
> 
> //hash function object for the Mem_hash
> class int_adr
> {public:
> const size_t operator()(const Port* const a)

gcc's hash_map requires this be a const member function.

>     {  int i;
>      /*haha, fooled ya*/   here is the fooling part that actually works on other compilers
>       const Port * const s= a;//(Port *)a;

The error you report has nothing to do with this.

>       i=(int)s;
>      return i;
>     }
> };
> 
> //hash of memory adresses
> typedef std::hash_map< const Port *, Port *, int_adr , equal_to <const Port * > > Mem_hash;
> 
> all these const identifiers are required by hash_map, the non-standard gnu stl-extension.
> 
> I don't wnat to change code that works with other compilers I need some compiler option or something to disable the error.
> 
> error mess:
> 
> gcc  -g -c -I/sw/pkg/gcc-2.95.2/include/g++-3  -I./loki main.cpp
> stl_hashtable.h: In method `size_t hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const lambda_calculus::Port 
> *const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::_M_bkt_num_key(const lambda_calculus::Port *const &, unsigned int) const':
> 
> stl_hashtable.h:536:   instantiated from `hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const 
> lambda_calculus::Port *const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::_M_bkt_num(const pair<const lambda_calculus::Port 
> *const,lambda_calculus::Port *> &, unsigned int) const'
> 
> stl_hashtable.h:930:   instantiated from `hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const 
> lambda_calculus::Port *const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::resize(unsigned int)'
> 
> stl_hashtable.h:744:   instantiated from `hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const 
> lambda_calculus::Port *const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::find_or_insert(const pair<const lambda_calculus::Port 
> *const,lambda_calculus::Port *> &)'
> 
> stl_hash_map.h:181:   instantiated from here
> 
> stl_hashtable.h:531: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers
> make: *** [main.o] Error 1
[snip]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* hash_map error: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers  passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers
@ 2003-05-13 14:13 buggy
  2003-05-13 18:05 ` LLeweLLyn Reese
  0 siblings, 1 reply; 4+ messages in thread
From: buggy @ 2003-05-13 14:13 UTC (permalink / raw)
  To: gcc-help

Have you ever seen this error?,

 it means that I pass a pointer to a constant object out of it's protected context. Yes I cast it down to a normal pointer indeed. The pointer is actually casted to an integer. I'm keeping a hash of memory adresses with 
the adresses of kopies of the objects these adresses refer too. So I do not alter this const pointer. Here is the code:

//hash function object for the Mem_hash
class int_adr
{public:
const size_t operator()(const Port* const a)
    {  int i;
     /*haha, fooled ya*/   here is the fooling part that actually works on other compilers
      const Port * const s= a;//(Port *)a;
      i=(int)s;
     return i;
    }
};

//hash of memory adresses
typedef std::hash_map< const Port *, Port *, int_adr , equal_to <const Port * > > Mem_hash;

all these const identifiers are required by hash_map, the non-standard gnu stl-extension.

I don't wnat to change code that works with other compilers I need some compiler option or something to disable the error.

error mess:

gcc  -g -c -I/sw/pkg/gcc-2.95.2/include/g++-3  -I./loki main.cpp
stl_hashtable.h: In method `size_t hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const lambda_calculus::Port 
*const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::_M_bkt_num_key(const lambda_calculus::Port *const &, unsigned int) const':

stl_hashtable.h:536:   instantiated from `hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const 
lambda_calculus::Port *const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::_M_bkt_num(const pair<const lambda_calculus::Port 
*const,lambda_calculus::Port *> &, unsigned int) const'

stl_hashtable.h:930:   instantiated from `hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const 
lambda_calculus::Port *const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::resize(unsigned int)'

stl_hashtable.h:744:   instantiated from `hashtable<pair<const lambda_calculus::Port *const,lambda_calculus::Port *>,const lambda_calculus::Port *,lambda_calculus::int_adr,_Select1st<pair<const 
lambda_calculus::Port *const,lambda_calculus::Port *> >,equal_to<const lambda_calculus::Port *>,allocator<lambda_calculus::Port *> >::find_or_insert(const pair<const lambda_calculus::Port 
*const,lambda_calculus::Port *> &)'

stl_hash_map.h:181:   instantiated from here

stl_hashtable.h:531: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers
make: *** [main.o] Error 1

if you do got an idea please respond to buggy@hetnet.nl or to the list

thanks

ali


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-11-05  1:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-11-05  1:25 hash_map error: passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers passing `const lambda_calculus::int_adr' as `this' argument of `const size_t lambda_calculus::int_adr::operator ()(const lambda_calculus::Port *)' discards qualifiers Ricardo Fodra
2005-11-05  1:52 ` Alex J. Dam
  -- strict thread matches above, loose matches on Subject: below --
2003-05-13 14:13 buggy
2003-05-13 18:05 ` LLeweLLyn Reese

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).