Re[7]: вызов функций по указателю в for_each
От: Сыроежка  
Дата: 17.03.12 10:27
Оценка:
Здравствуйте, 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. Они полезны тем, что демонстрируют, как правильно должны работать лямбда-выражения. Ну, и конечно нужно читать стандарт С++.
Меня можно встретить на www.cpp.forum24.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.