2013-05-10 107 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