Подтвердить что ты не робот

Pass 'const этот аргумент отбрасывает квалификаторы [-fpermissive]

У меня есть класс Cache, который имеет функцию write, указанную как

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

Я вызываю эту функцию следующим образом.

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

Вышеприведенная строка дает мне следующую ошибку

"передача 'const Cache as' этот аргумент 'bool Cache:: write (const MemoryAccess &, CacheLine &) отбрасывает квалификаторы [-fpermissive]."

этот аргумент является специфичным для компилятора, который помогает в кодировании и разбиении приоритета переменной имен пространства имен. Но такая переменная здесь не передается.

4b9b3361

Ответ 1

Так как c имеет тип const Cache *, вы можете называть его только функциями-членами const.

У вас есть два варианта:

(1) удалите const из объявления c;

(2) измените Cache::write() так:

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

(Обратите внимание на добавленный const в конце.)

Ответ 2

Когда вы вызываете метод с помощью указателя на объект, этот объект неявно передается методу в качестве указателя this. c, вероятно, имеет тип const Cache*. Поскольку метод write не объявлен как const, он имеет неконстантный this указатель, доступный из его тела, требующий отбрасывания const от c.

Ответ 3

Также, если ваш метод класса возвращает указатель на любом члене, вы не должны забывать писать const перед возвратом примера типа:

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