prathmesh.kallurkar
prathmesh.kallurkar

Reputation: 5686

passing ‘const this argument discards qualifiers [-fpermissive]

I have a class Cache which has a function write specified as

bool write(const MemoryAccess &memory_access, CacheLine &cl);

I am calling this function like this.

const Cache *this_cache;
c = (a==b)?my_cache:not_cache;
c->write(memory_access,cl);

The above line is giving me following error

"passing ‘const Cache’ as ‘this’ argument of ‘bool Cache::write(const MemoryAccess&, CacheLine&)’ discards qualifiers [-fpermissive]."

the this argument is compiler specific which helps in code-mangling and breaking local namespace variable priority. But such a variable is not being passed here.

Upvotes: 43

Views: 89962

Answers (3)

segevara
segevara

Reputation: 630

Also if your class's method returns pointer on any member you shouldn't forget write const before returning type example:

const float * getPosition() const{...}

Upvotes: 0

NPE
NPE

Reputation: 500317

Since c is of type const Cache *, you can only call const member functions on it.

You have two options:

(1) remove const from the declaration of c;

(2) change Cache::write() like so:

 bool write(const MemoryAccess &memory_access, CacheLine &cl) const;

(Note the added const at the end.)

Upvotes: 53

Alex Bakulin
Alex Bakulin

Reputation: 1668

When you call a method via a pointer to an object, this object is implicitly passed to the method as this pointer. c probably has type const Cache*. Since method write is not declared as const, it has non-const this pointer accessible from its body requiring const qualifier of c to be discarded.

Upvotes: 5

Related Questions