我在opencv中使用了一个名为'calcHist'的函数。它的声明是:
void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=false )
我写了一段代码片段:
Mat img = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat* arrays = &img;
int narrays = 1;
int channels[] = { 0 };
InputArray mask = noArray();
Mat hist;
int dims = 1;
int histSize[] = { 256 };
float hranges[] = { 0.0, 255.0 };
float *ranges[] = { hranges };
calcHist(arrays, narrays, channels, mask, hist, dims, histSize, ranges);
然后出现错误:IntelliSense:没有重载函数的实例“calcHist”匹配参数列表
但是如果我将'const'加到'float * ranges [] = {ranges};'就像const float *ranges[] = { hranges };
一样,没关系。
那么为什么这个'const'是必要的而且在histSize之前的'const'不是。
答案 0 :(得分:1)
T*
隐式转换为const T*
。相应地,这意味着T**
隐式转换为T*const*
。 T*const*
不是const T**
,因此此转换无法让您进行函数调用。