Pertanyaan melewati 'const argumen ini membuang kualifikasi [-fpermissive]


saya ada kelas Cache yang memiliki fungsi tulis yang ditentukan sebagai

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

Saya menyebut fungsi ini seperti ini.

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

Baris di atas memberi saya kesalahan berikut

"meneruskan‘ const Cache ’sebagai argumen‘ this ’dari‘ bool Cache :: write (const   MemoryAccess &, CacheLine &) 'membuang kualifikasi [-fpermissive]. "

argumen ini adalah kompiler khusus yang membantu dalam kode-mangling dan melanggar prioritas variabel namespace lokal. Tetapi variabel seperti itu tidak dilewatkan di sini.


32
2018-05-26 11:20


asal


Jawaban:


Sejak c adalah tipe const Cache *, Anda hanya bisa menelepon const fungsi anggota di atasnya.

Anda memiliki dua opsi:

(1) hapus const dari deklarasi c;

(2) berubah Cache::write() seperti ini:

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

(Perhatikan yang ditambahkan const pada akhirnya.)


39
2018-05-26 11:25



Ketika Anda memanggil metode melalui pointer ke objek, objek ini secara implisit diteruskan ke metode sebagai this penunjuk. c mungkin memiliki tipe const Cache*. Sejak metode write tidak dideklarasikan sebagai const, ia memiliki non-const this pointer diakses dari tubuhnya yang membutuhkan const kualifikasi c untuk dibuang.


4
2018-05-26 11:24



Juga jika metode kelas Anda mengembalikan penunjuk pada anggota mana pun, Anda tidak boleh lupa menulis const sebelum mengembalikan contoh tipe:

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


0
2017-10-29 05:45