表达式列表在创建指向 Mat 向量的指针时被视为初始值设定项中的复合表达式

expression list treated as compound expression in initializer in creating a Pointer to a vector of Mat's

本文关键字:表达式 复合 创建 列表 指针 向量 Mat      更新时间:2023-10-16

当我试图制作一个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;
} 

再见,