Я не могу получить доступ к элементам вектора в функции после передачи вектора в функцию в качестве параметра - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь передать вектор 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 Ответ

1 голос
/ 02 ноября 2019

Вы получаете доступ к элементам. Это не проблема.

Проблема в том, что вы пытаетесь преобразовать элемент в несовместимый тип. Как говорится в сообщении об ошибке:

не удалось преобразовать ... 'const cv :: Vec'to' std :: vector> '

Ваша функция хочет вернуть vector из cv::Vec3f элементов, но вы пытаетесь вернуть single 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...