Вопрос про std::advance
От: XJess  
Дата: 08.04.11 12:38
Оценка:
Привет всем!
В книге Леена Аммерааля написано, что std::advance применим ко всем типам итераторов. В следующем коде на advance выдается ошибка
"Error 1 error C2665: 'std::_Advance' : none of the 4 overloads could convert all the argument types"

хотя i++ компилируется, правда вывод происходит так же, как и без инкремента.


struct MyStruct {
    long nr;
    char name [30];
    bool operator < (const MyStruct& rhs)
    {
        return strcmp(name, rhs.name) < 0;
    }
};

std::ostream& operator << (std::ostream& s, const MyStruct& ms)
{
    s << ms.nr << " " << ms.name;
    return s;
}

MyStruct a [] =
{
    {10, "Anna"},
    {11, "Bunny"},
    {16, "Cat"},
    {28, "Susan"},
};

std::ostream_iterator<MyStruct> i(cout, " ");
i++;
//std::advance(i, 10);
std::copy(a, a + sizeof(a) / sizeof(a[0]), i);


Компилятор — VС 2008.

Объясните, плиз.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.