opencv 3.0 Mat不提供下标运算符

时间:2016-03-06 12:38:09

标签: c++ opencv3.0 vlfeat

我目前正在使用Xcode 7.2中的Opencv 3.0 C ++。我写了代码错误

Variable length array of non-POD element type cv::Mat

示例代码定义如下

Mat symbol[opts.numofblocksX*opts.numofblocksY];

我已将代码更改为

Mat symbol = symbol[opts.numofblocksX * opts.numofblocksY];

并显示另一个错误

cv::Mat doest not provide a subscript operator

以前是否有人面临同样的问题?我可以在这里实施什么解决方案?

由于

1 个答案:

答案 0 :(得分:0)

此代码:

cv::Mat symbol[opts.numofblocksX*opts.numofblocksY];

定义大小为Mat的{​​{1}}数组。

你得到的错误是因为这个数组的大小在编译时没有固定,而且不是POD type

您的新代码存在缺陷。

opts.numofblocksX*opts.numofblocksY

这定义了一个cv::Mat symbol = symbol[opts.numofblocksX * opts.numofblocksY]; 被调用的符号,然后无意义地尝试用Mat作为参数调用operator []。这不是声明一个数组。

有两个明显的选择:

  • 在允许变量大小分配的heap上分配您的数组。别忘了opts.numofblocksX * opts.numofblocksY以后! (或使用智能指针)

    delete[]

  • 使用std :: vector(推荐):

    cv::Mat *symbol = new cv::Mat[opts.numofblocksX * opts.numofblocksY];