Как перебрать два вектора внутри цикла - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь получить доступ к нескольким элементам между двумя разными векторами внутри цикла for.Visual Studio выдает мне следующее предупреждение C26451;

Арифметическое переполнение: использование оператора '+' для 4-байтового значения и затем приведение результата к 8-байтовому значению.Приведите значение к более широкому типу, прежде чем вызывать оператор '+', чтобы избежать переполнения (io.2).

Я пробовал приводить различные типы данных, но понимаю, что должен использовать итераторы для перемещения по вектору.в цикле однако, поскольку я использую два вектора в цикле и несколько элементов для каждого вектора одновременно, я не могу найти способ правильно реализовать это. Вот две разные функции, в которых у меня та же проблема;

Первая функция;

Mat drawRails(Mat draw, vector<Point>lLines, vector<Point>rLines) {
//draw rails to the input image
    for (int j = 0; j < lLines.size() - 1; j++) {
        //draw rails - accessing point j and next point to correctly define the line
        line(draw, lLines[j], lLines[j + 1], Scalar(255, 255, 255), 4);
        line(draw, rLines[j], rLines[j + 1], Scalar(255, 255, 255), 4);
    }
    return draw;
}

Вторая функция;


Mat drawHazardLines(Mat draw, vector<Point>lLines, vector<Point>rLines, int frameNum) {
//draw hazard lines to track
    for (int j = 0; j < lLines.size() - 1; j++) {
        //draw outwards moving rail lines - divide rail width by ten and multiply by modulo 10 of frame to achieve motion
        int railDistNext = (rLines[j + 1].x - lLines[j + 1].x) / 10 * (frameNum % 10) + 2;
        int railDist = (rLines[j].x - lLines[j].x) / 10 * (frameNum % 10) + 2;


        Point Low, High;
        Low = Point(lLines[j].x - railDist, lLines[j].y);
        High = Point(lLines[j + 1].x - railDistNext, lLines[j + 1].y);
        line(draw, Low, High, Scalar(0, 0, 255), 4);

        Low = Point(rLines[j].x + railDist, rLines[j].y);
        High = Point(rLines[j + 1].x + railDistNext, rLines[j + 1].y);
        line(draw, Low, High, Scalar(0, 0, 255), 4);
    }
    return draw;
}

Код работает нормально, но выдает вышеупомянутые ошибки, которые я хотел бы устранить

Ответы [ 2 ]

2 голосов
/ 27 апреля 2019

Ошибка означает, что происходит преобразование из long в int.По предоставленному вами коду трудно определить, где находится ошибка, но я бы предложил изменить int на long в вашем коде.

0 голосов
/ 27 апреля 2019
for(auto lIter = lLines.begin(), rIter = rLines.begin(); liter != lLines.end(); ++lIter, ++rIter)
{
   ... 
}

Вы должны убедиться, что в rLines есть как минимум столько же элементов, сколько в lLines, конечно ...

...