表达式列表在创建指向 Mat 向量的指针时被视为初始值设定项中的复合表达式
expression list treated as compound expression in initializer in creating a Pointer to a vector of Mat's
当我试图制作一个c数组以提供给我的函数时,我在vector<Mat> *std_carrayTovectorm(m, 2);
行上收到了以下错误消息,该函数将Mat的c数组转换为c++向量。我认为我的代码是正确的,但不确定问题是否出在我的std_carrayTovectorm
函数上。如何编辑我创建的C数组或std_carrayTovectorm
函数,以从C数组创建Mat的向量。
谢谢
//在初始值设定项中将表达式列表视为复合表达式//从"int"到"std::vector*"的转换无效
typedef vector<Mat> vector_Mat;
vector_Mat* std_carrayTovectorm(Mat* a, size_t len) {
vector<Mat>* v = new vector<Mat>;
for(size_t i = 0; i < len; i++)
v->push_back(a[i]);
return v;
}
int main( int argc, char** argv )
{
Mat img1 = imread( "/home/w/d1");
Mat img2 = imread( "/home/w/d1");
Mat* m[2] = { new Mat (img1), new Mat (img2) };
vector<Mat> *std_carrayTovectorm(m, 2);
return 0;
}
指针有一些问题。。。你在main中粘贴了一个函数的原型,却忘记删除返回类型!
这是一个修改后的程序,让你回到正确的轨道上。注意,我将vector_Mat
修改为指向Mat
的指针向量。。。
#include<iostream>
#include<cmath>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;
typedef vector<Mat*> vector_Mat;
vector_Mat* std_carrayTovectorm(Mat** a, size_t len) {
vector_Mat* v = new vector_Mat();
for(size_t i = 0; i < len; i++)
v->push_back(a[i]);
return v;
}
int main( int argc, char** argv )
{
Mat img1 = imread( "one.jpg");
Mat img2 = imread( "two.jpg");
Mat* m[2] = { &img1, &img2 };
vector_Mat* v=std_carrayTovectorm(m, 2);
imwrite("three.jpg",*((*v)[0]));
imwrite("four.jpg",*((*v)[1]));
delete v;
return 0;
}
再见,
编辑:不修改vector_Mat
:
#include<iostream>
#include<cmath>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;
typedef vector<Mat> vector_Mat;
vector_Mat* std_carrayTovectorm(Mat** a, size_t len) {
vector_Mat* v = new vector_Mat();
for(size_t i = 0; i < len; i++)
v->push_back(*a[i]);
return v;
}
int main( int argc, char** argv )
{
Mat img1 = imread( "one.jpg");
Mat img2 = imread( "two.jpg");
Mat* m[2] = { &img1, &img2 };
vector_Mat* v=std_carrayTovectorm(m, 2);
imwrite("three.jpg",((*v)[0]));
imwrite("four.jpg",((*v)[1]));
delete v;
return 0;
}
再见,
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- C++模板函数中的初始化 - 新的初始值设定项表达式列表被视为复合表达式
- 为什么这个复合语句作为用大括号和括号括起来的语句序列似乎不是有效的语句表达式
- 复合赋值的左侧表达式是未初始化的值.计算出的值也将是垃圾
- if 语句中的复合表达式
- C 套接字误差(新的初始器表达式列表被视为复合表达式)
- 错误:表达式列表在初始化器[-fpermissive] Double Paycalc(p,yir,y)中被视为复合表达式
- 可变模板:表达式列表在函数转换错误中被视为复合表达式
- 表达式列表被视为复合表达式
- 将提升 lambda 与复合表达式结合使用
- 表达式列表在初始化器中被视为复合表达式
- 表达式列表在创建指向 Mat 向量的指针时被视为初始值设定项中的复合表达式
- 函数强制转换中作为复合表达式处理的表达式列表[-fpermissive]