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]."
этот аргумент является специфичным для компилятора, который помогает в кодировании и разбиении приоритета переменной имен пространства имен. Но такая переменная здесь не передается.
Ответы
Ответ 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{...}