LINUX.ORG.RU

Вектор внутри структуры.

 


0

2

Есть такая вот структурка

struct ImageWithData{
    cv::Mat img;
    std::vector <cv::Rect> faces;
    std::vector <cv::Point2f> points;
};
В такой вот функции совершаю добавление элемента в вектор таких структур.
void initStorage(VideoCapture capture,vector <ImageWithData> storage,string cascade_filename) {
    Mat frame;
    std::vector< cv::Point2f > points;
    vector <cv::Rect> faces;
    while (frame.empty()) capture >> frame;
    while(points.empty()){
        faces = DetectHaarOnImage(frame, cascade_filename);
        cv::Mat mask = getMaskByRectangleArray(frame, faces);
        points = gF2T(frame, mask);
    }
     SaveImg(storage, frame, faces, points);


}
void SaveImg(vector <ImageWithData> storage, cv::Mat img,
    std::vector <cv::Rect> faces,
    std::vector <cv::Point2f> points =  std::vector <cv::Point2f>()){
    ImageWithData s;
    img.copyTo(s.img);
    s.faces.assign(faces.begin(),faces.end());
    s.points.assign(points.begin(),points.end());
    storage.push_back(s);
    if (storage.size() > 10)
        storage.erase(storage.begin());
}
Отладчик показывает, что вектора faces и points не пустые. А вот s.faces и s.points остаются пустыми даже после assign. В чем дело, где я промахнулся?

★★★

Последнее исправление: beastie (всего исправлений: 1)

Подозреваю, что ты в параметрах функций забыл сделать ссылки ссылками.

Deleted
()

Юзай cout (или другой вывод, например в Qt есть qDebug) и пихай его перед каждой строкой, начиная сначала. Он покажет, на какой строке неправильно работает программа. Это один из способов отладки. И, да, используй «using namespace std».

puding
()

прекрати передавать в процедуры векторы по значению.

x0r ★★★★★
()
Ответ на: комментарий от puding

И, да, не используй «using namespace std».

Fixed FTGJ.

E ★★★
()

Ну да у тебя в SaveImg передается не ссылка и не указатель на storage. То есть ты добавляешь в копию, а не в сам сторейдж.

Dudraug ★★★★★
()
Ответ на: комментарий от puding

Юзай cout (или другой вывод, например в Qt есть qDebug) и пихай его перед каждой строкой, начиная сначала.

Это один из способов отладки.

используй «using namespace std».

Концентрация антипаттернов в одном комментарии зашкаливает

yoghurt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.