2012-05-26 90 views
28

我有一個類Cache具有指定爲傳遞「const的這種說法丟棄預選賽[-fpermissive]

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的緩存' 爲 '這個' 的參數 '布爾緩存::寫(常量 MemoryAccess &,高速緩存行&)' 丟棄限定符[-fpermissive]。「

這個參數是編譯器特定的,它有助於代碼修改和打破局部命名空間變量的優先級。但是這樣的變量並沒有被傳遞到這裏。

+0

請嘗試修復您的例子:你談論的功能'write',那麼你可以調用'read'。你在哪裏聲明'memory_access'和'cl'? – betabandido

+1

*這個參數是編譯器特定的,它有助於代碼修改和打破局部名稱空間變量優先級* ??? – NPE

回答

35

由於c的類型爲const Cache *,因此只能對其調用const成員函數。

你有兩個選擇:

(1)從c聲明刪除const;

(2)改變Cache::write()像這樣:

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

(注意在最後的加const

+3

const在簽名的末尾有什麼意義?當我們說這是不變的時候,我們究竟意味着什麼。它應該不是默認的常量? –

+1

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

4

當您通過指向對象的指針調用方法時,此對象將作爲this指針隱式傳遞給方法。 c可能有類型const Cache*。由於方法write未聲明爲const,因此其非正常this指針可從其主體訪問,因此需要廢除const限定符c

0

此外,如果你的類的方法,任何成員返回指針,你不應該忘記寫常量之前返回類型例如:

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

相關問題