动态创建自定义对象类型的数组
Dynamically create an array of custom object types
我正在尝试创建一个Mat对象数组来存储图像,并且收到了使用静态类型数字以外的任何数字(如10 )的警告
int numberOfRects = boundRect.size();
Mat image_array[numberOfRects];
当我尝试这个代码时,我得到一个错误,说明非POD元素类型"cv::Mat"的可变长度数组
此代码也是如此:Mat image_array[boundRect.size()];
如何根据boundect的大小创建Mats数组?
您需要创建一个动态数组。这是学习语言的一个基本但不简单的方面,所以我建议你先学习一些简单的例子。
你可以像这样创建
Mat *image_array = new Mat[numberOfRects];
但必须在完成后将其删除,否则会出现内存泄漏。
delete[] image_array;
一个更好的选择是使用std::vector
,它会自动删除其内容。但是一个类必须是可复制的才能在其中使用,我不知道你的这个Mat
类允许什么。看起来像
std::vector<Mat> image_array(numberOfRects);
如果Mat
无法复制,那么正确的C++11解决方案是使用智能指针向量。
std::vector<std::unique_ptr<Mat>> image_array(numberOfRects);
for (auto& mat : image_array)
{
mat = std::make_unique<Mat>();
}
相关文章:
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 取消引用结束指针到数组类型的一个
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 如何在数组类型的模板代码中计算std::size_t
- LLVM 无法将数组类型强制转换为常量数组
- 推荐的方法在不初始化值的情况下使数组类型为 std::unique_ptr?
- 特征:从数组类型中获取标量类型是否记录?
- T D[N] 总是声明数组类型的对象吗?
- 如何在模板中推断数组类型?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 如何为所有非数组类型专门化模板?
- 数组类型 (C++) 的初始化
- 我预测char数组类型值只能投射指针类型
- 将数组类型更改为 Int16 会节省存储空间吗?
- 采用通用数组类型的函数
- 数组类型 'int [8]'不可分配
- 数组类型 'float [size]'不可分配
- C++。候选模板被忽略 - 无法将数组类型与自身匹配