2017-07-11 35 views
-4

非常簡單:我想指定一個函數不會改變它的指針參數。如何?又一個:C++ - 從'const type *'無效轉換爲'type *'

class A { 
private: 
    int *p; 
public: 
    void foo (const int *q) { 
    p = q; 
    } 
}; 

A a; 
int b = 3; 
int *c = &b; 
a.foo(c); 

仍然沒有工作,感謝您的幫助!

+2

你正在接受'const int *'參數並試圖將它保存在一個非''constst'變量中。錯誤信息正試圖向您解釋,請花點時間仔細閱讀。 – tadman

+1

是的,你說函數*本身*不會修改'q'指向的東西。但是,然後將它保存在一個非常量指針中,以便其他*成員函數可以修改數據。 –

+1

'A = a;'這是什麼?你對細節的關注度很低。 –

回答

1

好的,你已經澄清,你沒有打算增加const到指針,而是指向(而這當然可以安全地刪除時複製指針)。錯誤消息很好地表明您在該目標中失敗。

的類型做的是:

int* const 

記住,const直接適用於左側(除非有什麼也沒有,在這種情況下,直接適用於右側)。

0

您正在傳遞'foo()'常量指針,這意味着您告訴編譯器您不希望任何人更改指針所指向的數據。因此,將const指針轉換爲非const指針是沒有意義的。然而,如果你真的想這樣做'只是爲了好玩',那麼你可以通過'memcpy'來解決這個問題。

+0

'memcpy'會是一個奇怪的方法。 'const_cast'肯定 –

相關問題