将向量作为参数传递给函数后,无法访问向量中的向量元素

时间:2019-11-02 16:22:29

标签: c++ opencv

我尝试将cv::Vec3f向量作为参数传递给函数,但是在函数内部我无法访问向量元素。

这是我的代码:

#include <iostream>
#include <opencv2/opencv.hpp>

int main() {

    cv::Vec3f y(1.0f, 5.0f, 2.0f);
    cv::Matx33f M(1,2,3,4,5,6,7,8,9);
    std::vector<cv::Vec3f> test(const std::vector<cv::Vec3f>&p,const cv::Matx33f &M);
    cv::Vec3f v1_new = test({y}, M)[0];    

    std::cout<<v1_new<<std::endl;

std::vector<cv::Vec3f> test(const std::vector<cv::Vec3f>& p, const cv::Matx33f &M)
{
    std::vector<cv::Vec3f> result;
    return p[0];
}

错误:

 error: could not convert ‘(& p)->std::vector<cv::Vec<float, 3> >::operator[](0)’ from ‘const value_type {aka const cv::Vec<float, 3>}’ to ‘std::vector<cv::Vec<float, 3> >’
     return p[0];
               ^

1 个答案:

答案 0 :(得分:1)

您正在访问元素。那不是问题。

问题是您试图将元素转换为不兼容的类型。如错误消息所述:

  

无法将转换为``std :: vector >”

您的函数希望返回cv::Vec3f个元素的 vector ,但是您尝试返回一个单个 cv::Vec3f的元素。这与函数的返回类型不匹配,因此必须进行转换,但是没有定义这种转换,因此会出错。

您声明了兼容的向量变量result,但没有在其中填充任何内容,也没有return对其进行填充。

尝试以下方法:

std::vector<cv::Vec3f> test(const std::vector<cv::Vec3f>& p, const cv::Matx33f &M)
{
    std::vector<cv::Vec3f> result;
    result.push_back(p[0]);
    return result;
}