2012-05-26 11 views
28

que tienen una clase Cache que tiene una escritura función especificada comopaso const’este argumento descarta calificadores [-fpermissive]

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

Estoy llamando a esta función como esta.

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

La línea anterior es que me da error de seguimiento

"pasa 'Caché const' como 'este' argumento de 'caché de escritura :: bool (const MemoryAccess &, & CacheLine)' descartes calificadores [-permisivo] ".

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í.

+0

Por favor intente solucionar el ejemplo: se habla de función 'write', luego llamas 'leer'. ¿Dónde declaras 'memory_access' y' cl'? – betabandido

+1

* 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 * ??? – NPE

Respuesta

35

Dado que c es del tipo const Cache *, solo puede llamar a const funciones de miembro en él.

Usted tiene dos opciones:

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

(2) cambiar Cache::write() así:

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

(Nota del const añadido al final.)

+3

¿Cuál es el significado de const al final de la firma? ¿Qué queremos decir exactamente cuando decimos que esto es constante? ¿No debería ser constante por defecto? –

+1

@ prathmesh.kallurkar: http://www.parashift.com/c++faq-lite/const-correctness.html#faq-18.10 – NPE

4

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 tenga el tipo const Cache*. Como el método write no está declarado como const, tiene un puntero no const this accesible desde su cuerpo que requiere el calificador const de c para ser descartado.

0

Además, si el método de la clase vuelve puntero en cualquier miembro que no debe olvidarse const escritura antes de regresar ejemplo tipo:

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

Cuestiones relacionadas