векторный итератор не разыменовывается ....? - PullRequest
2 голосов
/ 27 февраля 2012

`void calc_distance (векторные подсказки пальцами, CvPoint palmCenter, IplImage * source) { двойное расстояние = 0;

vector<CvPoint>::iterator p;

if (fingerTips.size() != NULL && fingerTips.size() <= 5 && fingerTips.size()  >= 1)
{   

    if ((fingerTips.size() > 1) || (fingerTips.size() <= 5))
        {

        distance = 0;

        p = fingerTips.begin();

        CvPoint forefinger = *p;

        CvPoint secondfinger;

        for( ;p != fingerTips.end(); )
                    {

                           p++; 

                           secondfinger = *p;

               distance +=  sqrt(double((forefinger.x - secondfinger.x) * 

(forefinger.x - secondfinger.x) + (forefinger.y - secondfinger.y) * (forefinger.y - secondfinger.y)));

                cvLine(source,forefinger,secondfinger,cvScalar(1.0,1.0,1.0),3,8);

                forefinger = secondfinger;

            }
                    }
     }

}

// в качестве параметров я передал вектор координат кончиков пальцев и центр ладони вместе с источником изображения но все же я получаю сообщение об ошибке: "векторный итератор не отличается" .... ошибка возникает во 2-й итерации в "secondfinger = * p;" линия..... пожалуйста, помогите мне .....

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

пожалуйста, помогите мне ...

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Вы проверяете p != end, затем P++, затем разыменование. Вы должны просто сделать стандарт для цикла:

for(; p != fingerTips.end(); p++)
{
    //p++ //This is gone now. It's up in the for loop
   ...
}

вместо p++ в цикле for

0 голосов
/ 27 февраля 2012

Вам нужно разыменовать p, прежде чем увеличивать его; в противном случае вы заканчиваете тем, что пытаетесь разыменовать fingertips.end(), когда вы добираетесь до конца коллекции, которая не может быть разыменована.

for( ;p != fingerTips.end(); ++p)
{
    secondfinger = *p;

    distance +=  sqrt(double((forefinger.x - secondfinger.x) * (forefinger.x - secondfinger.x) + (forefinger.y - secondfinger.y) * (forefinger.y - secondfinger.y)) );

    cvLine(source,forefinger,secondfinger,cvScalar(1.0,1.0,1.0),3,8);

    forefinger = secondfinger;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...