2013-03-15 70 views
0

我工作了一段時間後再次用C++,我懷疑發送指針作爲函數中的參數。發送指針作爲常量的指針問題

我想發送一個對象指針到一個函數,但有一個const狀態,知道指針指向的對象不會隨時被修改。所以我這樣做:

int hi(const SomeObject* so) 
{ 
    so->SayHi(); 
} 

SomeObject* so = new SomeObject(); 
hi(so); 

但它沒有奏效。它說不兼容的類型...

此外,如果我將const添加到函數,它會不同嗎?像:

int hi(const SomeObject* so) const; 

任何人都可以解釋我這個疑問嗎?謝謝

+1

如何你在打電話嗎?你通過了什麼?什麼是完整的錯誤? – 2013-03-15 12:04:58

+0

「它說兼容類型」?這聽起來不像是編譯器錯誤。也許你應該向我們展示你的* actual *代碼,以及你得到的* actual *錯誤。 :) – jalf 2013-03-15 12:05:31

+1

請修改您的問題以包含完整的錯誤,並顯示_how_您正在調用它,以及如何聲明您在調用中使用的變量。 – 2013-03-15 12:05:52

回答

3
int hi(const SomeObject* so) 

您聲明SomeObject是不變的。如果sayHi沒有聲明爲const,這會導致編譯器錯誤。

class SomeObject { 
    void sayHi(void) const; 
} 

如果你的目的是爲了使指針常數(不是它指向的對象),它應該是這樣的:

int hi(SomeObject* const so) 

Here你可以看到指針和常量指針