Pregunta pasando 'const este argumento descarta los calificadores [-permisivo]


Tengo una clase Cache que tiene una escritura de función especificada como

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

Estoy llamando a esta función así.

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

La línea anterior me está dando el siguiente error

"pasar" const Cache 'como' este 'argumento de' bool Cache :: write (const   MemoryAccess &, CacheLine &) 'descarta los calificadores [-fpermissive]. "

este argumento es específico del compilador, lo que ayuda a modificar el código y romper la prioridad de la variable de espacio de nombres local. Pero tal variable no se pasa aquí.


32
2018-05-26 11:20


origen


Respuestas:


Ya que c es de tipo const Cache *, solo puedes llamar const miembro funciona en él.

Tienes dos opciones:

(1) eliminar const de la declaración de c;

(2) cambio Cache::write() al igual que:

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

(Tenga en cuenta el agregado const al final.)


39
2018-05-26 11:25



Cuando llama a un método mediante un puntero a un objeto, este objeto se pasa implícitamente al método como this puntero. c Probablemente tiene tipo const Cache*. Como método write no está declarado como const, tiene no const this puntero accesible desde su cuerpo que requiere const calificador de c ser descartado


4
2018-05-26 11:24



Además, si el método de su clase devuelve el puntero a cualquier miembro, no debe olvidar escribir const antes de devolver el ejemplo de tipo:

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


0
2017-10-29 05:45