error: no match for 'operator!='

Рейтинг: 0Ответов: 1Опубликовано: 14.04.2015
void Verylong::normal()
{
    for (auto i = lnum.begin(); i != lnum.back(); ++i)
    {   
        if (abs(*i) >= base){
            if (*i > 0)
            {
                if (i == lnum.back() - 1)
                    lnum.push_back(*i / base);
                else    
                    *(i+1) += *i / base;  

                *i %= base; 
            }
            else{
                if (i == lnum.back() - 1)
                    lnum.push_back(*i / base);
                else    
                    *(i+1) += *i / base;

                *i = base + (*i % base);   //  т.к  *i всегда отриц. а base всегда полож., эквивалентно *i = base - |i % base| 
            }
        }
    }

    if (lnum[lnum.size() - 1] < 0){
        lnum[lnum.size() - 1] *= -1;
        _sign = false;
    }
    else 
        _sign = true;
}

выдает ошибку на строке for (auto i = lnum.begin(); i != lnum.back(); ++i) в чем проблема?

Ответы

▲ 1
for (auto i = lnum.begin(); i != lnum.back(); ++i)

i имеет тип std::vector<int>::iterator, тогда как lnum.back() возвращает объект типа int. Не существует оператора !=, который может сравнить int и std::vector<int>::iterator, о чём Вас компилятор и уведомляет.

Когда Вы работаете с итераторами, тогда нужно использовать пару begin()/end()(cbegin()/cend())

Когда Вы работаете со значениями, тогда можно использовать пару front()/back()

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