Re[5]: вызов функций по указателю в for_each
От: Сыроежка  
Дата: 17.03.12 09:41
Оценка:
Здравствуйте, SCRABER, Вы писали:

SCR>Здравствуйте, Сыроежка, Вы писали:


С>>Здравствуйте, SCRABER, Вы писали:


SCR>>>Здравствуйте, Сыроежка, Вы писали:


С>>>>void fn( const std::list<pf> &l, int x )

С>>>>{

С>>>> std::for_each( l.begin(), l.end(),

С>>>> [&x]( pf f ){ f( x ); } );
С>>>>}
С>>>>[/ccode]

SCR>>>У меня вот это не компилируется ?????

SCR>>>Embarcadero C++ Builder XE2.

С>>Мораль: давно известно, что продукты Borland никогда не соответствовали стандарту, отставали по внедрению новых положений стандарта и имели заоблочную цену!

С>>Сейчас Embarcadero проводит агрессивную рекламную компанию по протолкиванию своих средств разработки XE2. Теперь буду знать, что не следует покупать их продукты не только изз-за завышенной цены (у них upgrade идет по цене, дороже нового продукта!), но также из-за того, что их компилятор не поддерживает новый стандарт С++. То есть это все равно, что лпатить деньги за то, что уже бесполезно.

С>>Скорей ввего ваш компилчятор не поддерживает лямбда-выражения. если бы вы указали сообщение об ошибке, можно было бы более точно определить причину, почему код не компилируется. Но в любом случае лямбда-выражение можно заменить функциональным объектом.


SCR>К сожалению конкретно сейчас под рукой XE2 нет.

SCR>Есть Embarcadero Borland C++ Builder 2010.

SCR>Ошибка:

SCR>[BCC32 Error] File1.cpp(31): E2188 Expression syntax
SCR> File1.cpp(29): parsing: void fn(const std::list<void (*)(int),std::allocator<void (*)(int)> > &,int)

Я не вижу здесь синтаксической ошибки. Данное предложение

void fn( const std::list<pf> &l, int x )

из определения функции fn корректно, тем более, что я просто скопировал сюда уже оттранслированный код.
А есть ли еще дполнительные сообщения кроме данного аскетского сообщения? Вполне возможно, что это сообщение — реакция на ошибку, которая расположена в коде перед этой строкой.
Есть два варианта. Сначала закоментируйте предложение в функции main, где происходит вызов алгоритма for_each. Если код скомпилируется, то значит данное сообщение об ошибке есть не является следствием синтаксической ошибке.

Второе — я хорошо помню, что компиляторы Borland не могли работать с квалификатором const у массивов и контейнеров, когда те использовались со стандартными алгоритмами. То есть компилятор при инстанциировании шаблонов не справлялся с квалификатором const.
Поэтому когда выполните первую проверку, и код у вас скомпилируется ( в чем я не сомневаюсь, если только вы не сделали опечатку ), то просто уберите в объявлении первого параметра функции квалификатор const
Меня можно встретить на www.cpp.forum24.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.