2013-05-10 76 views
0

我有下面的函數聲明沒有呼叫匹配功能:常量指針的指針

int vectorQuantization(const Color **input, Color **output, 
         const int rows, const int cols, const int numColors); 

,當我試圖從我的主函數中調用它,我得到的錯誤「否調用「VectorQuantization匹配功能'「。

Color *input2quantize; 
Color *outputQuantized; 
... 
... 
vectorQuantization(&input2quantize, &outputQuantized, rows, cols, 10); 

什麼,我試圖做的是使功能不變的輸入,使其不能在函數內部進行修改,我還以爲它聲明爲常量將使。 我在這裏錯過了什麼?我正在考慮使用引用而不是指針指針,但我感到困惑。所以有兩個問題:

  1. 我該如何解決這個錯誤?
  2. 使用引用而不是const指針指針會更好嗎?
+0

vectorQuantization((const的色彩和)input2quantize,與outputQuantized,(const int的)行,(const int的)的cols,(const int的)10); – Lefsler 2013-05-10 10:54:09

回答

1

這樣說:

typedef Color * ColorPtr; 

ColorPtr input2quantize; 

int vectorQuantization(ColorPtr const * input); 

vectorQuantization(&input2quantize); 

如果你喜歡,你可以拼出函數參數爲Color * const * input打出來了。

注意,這可以保護你免受具有該功能改變指針,而不是指針對象,這是不能被保護,因爲你有一個可變的指針。如果你想,你需要一個單獨的類型:

typedef Color const * SafeColorPtr; 

SafeColorPtr safeinput = input2quantize; 

int foo(SafeColorPtr const * pInput); 

foo(&safeinput); 
+0

實際上,如果指針受到保護,指針也可以被保護。 'T **'不能轉換爲'const T **',但它可以轉換爲'const T * const *'。 – Angew 2013-05-10 10:57:56

+0

非常感謝。我明白你的意思,但我可以改變(這是一個好主意)使用引用,而不是指針指針?什麼是最好的選擇(或者兩者都是好的)? – BRabbit27 2013-05-10 11:02:04

+0

也許我正在談論話題,但我想問一下,'const int * imgIn'和'int const * imgIn'之間有什麼區別?,在數據類型之前或之後放置** const **? – BRabbit27 2013-05-10 11:05:17