Привет всем!
В книге Леена Аммерааля написано, что 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.
Объясните, плиз.
XJ>В книге Леена Аммерааля написано, что std::advance применим ко всем типам итераторов.
Я сильно подозреваю, что Леен забыл про стрим итераторы, и имел в виду итераторы по контейнерам.
XJ>"Error 1 error C2665: 'std::_Advance' : none of the 4 overloads could convert all the argument types"
И это правильно.
XJ>хотя i++ компилируется, правда вывод происходит так же, как и без инкремента.
А чего бы ты ожидала? Какое поведение программы тебе бы казалось разумным?