Здравствуйте, SCRABER, Вы писали:
SCR>Здравствуйте, Сыроежка, Вы писали:
С>>Я не вижу здесь синтаксической ошибки. Данное предложение
С>>void fn( const std::list<pf> &l, int x )
С>>из определения функции fn корректно, тем более, что я просто скопировал сюда уже оттранслированный код.
С>>А есть ли еще дполнительные сообщения кроме данного аскетского сообщения? Вполне возможно, что это сообщение — реакция на ошибку, которая расположена в коде перед этой строкой.
С>>Есть два варианта. Сначала закоментируйте предложение в функции main, где происходит вызов алгоритма for_each. Если код скомпилируется, то значит данное сообщение об ошибке есть не является следствием синтаксической ошибке.
С>>Второе — я хорошо помню, что компиляторы Borland не могли работать с квалификатором const у массивов и контейнеров, когда те использовались со стандартными алгоритмами. То есть компилятор при инстанциировании шаблонов не справлялся с квалификатором const.
С>>Поэтому когда выполните первую проверку, и код у вас скомпилируется ( в чем я не сомневаюсь, если только вы не сделали опечатку ), то просто уберите в объявлении первого параметра функции квалификатор const
SCR>Никаких других ошибок компилятор не выдает.
SCR>Вообщем то он ругается не на объявление функции, а на строку
SCR>SCR>std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } );
SCR>
SCR>Если ее за комментировать, то все компилится.
SCR>SCR>void fn( const std::list<pf> &l, int x )
SCR>{
SCR>// std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // it's ok
SCR>}
SCR>
SCR>Слудующий код:
SCR>SCR>void fn( std::list<pf> &l, int x )
SCR>{
SCR> std::for_each( l.begin(), l.end(), [&x]( pf f ){ f( x ); } ); // error
SCR>}
SCR>
SCR>увы ошибка парсинга. Скорее всего компилятор не поддерживает синтаксиси лямбда-выражений.
SCR>Где можно посмотреть на синтаксис лямбда-выражений для С++, а то все встречается для С#?
Да, скорей всего ваш компилятор BBorland не поддерживает лямбда-выражения. Достаточно хорошо вместе с познавательными примерами лямбда-выражения описаны у Майкрософт. Посмотрите
здесь.
Также на моей страничке, которая указана ниже, в различных темах раздела С/С++, например, "Два языка С++ в одном яззыке", "Вывод на консоль — широкий выбор средств в С++" имеются наглядные простые примеры использования лямбда-выражений. Кроме того мною описаны различные баги лямбда-выражений в компиляторе MS VC++ 2010. Они полезны тем, что демонстрируют, как правильно должны работать лямбда-выражения. Ну, и конечно нужно читать стандарт С++.