![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fynivx |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Здравствуйте. У меня возникла следующая проблема:
необходимо удалить элементы из списка по условию. Вот это:
при компиляции в clang выдает ошибку "expected expression" на первой квадратной скобке. При компиляции в gcc говорит, что необходимо указать тип предиката в шаблоне remove_if. Но какой тип нужно указать - я не знаю. Функция приобретает работоспособность, если сделать так:
Но это плохой, никуда не годный вариант. Подскажите пожалуйста, что нужно сделать, чтобы первый вариант, все-таки, заработал? |
||||
|
|||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
в опциях компилятора установлено -std=c++0x ? какая версия gcc ? и ещё... конечно, не должно никак влиять, но... попробуй передавать в лямбду по ссылке
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Fynivx, а ты точно включил поддержку С++11 в настройках компилятора? И вообще, версия твоего компилятора поддерживает lambda-выражения?
|
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
borisbn, bsa
clang - 3.0 gcc - 4.6.3 В gcc - указан стандарт c++0x (-std=c++0x) В clang этого делать просто не нужно - он даже такого ключа не знает. И, судя по тому, что в некоторых местах вполне успешно юзаются стандартные трэды, поддержка, все-таки, есть. borisbn, Да, тут нужно передавать по ссылке и, да, на результат компиляции это не повлияло. ---- Я только что посмотрел статус поддержки 11ой спецификации на сайте clang. Печально, но дело в том, что в релизе лямбды пока не поддерживаются. Но что нужно сказать gcc, чтобы он это дело откомпилил? Шаблон должен подбираться автоматически, но этого не происходит. Видимо потому, что gcc не может определить тип лямбды. Возможно ли ему как-то с этим помочь? Добавлено через 5 минут и 58 секунд Вы не поверите. Я немного затупил, и не попробовал проверить это на gcc после последнего обновления. И таки что бы вы думали?) Теперь всё компилится.) Видимо, недоработка была в нем, и в последнем обновлении ее исправили. Всем спасибо, теперь всё работает) Ждем нового релиза clang) |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
юзанье clang`а с этого и нужно начинать. Добавлено через 44 секунды -std=c++0x Добавлено через 2 минуты и 43 секунды gcc поддерживает лямбды начиная с 4.6.0 |
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
boostcoder,
Я с этого и начал, вообще-то. И во втором посте написал, что изначально использовал этот флаг. а насчет лямбды он и не ругался - он не мог определить необходимый тип шаблона для нее. Внимательнее читайте, товаристч) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
list.remove_if ([..] (...) ->bool { return ... }); Это сообщение отредактировал(а) mes - 10.3.2012, 12:34 |
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
mes,
Предиката а не возвращаемого им значения. Но все-равно спасибо. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тогда либо с хидерами напутали, либо глюк компилятора.. Это сообщение отредактировал(а) mes - 10.3.2012, 10:51 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
если бы ты с этого начинал, у тебя бы не возникло желания юзать лямбды на clang 3.0 воспроизведи ошибку. тут например. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
boostcoder,
Еще раз. Я с самого начала написал про два компилятора. И с самого начала написал, что каждый из них от меня хочет. После этого я сам написал, почему clang выдает синтаксическую ошибку. Как выбрать компилятор? Читать посты - не царское дело. Я понимаю. |
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
boostcoder
К сожалению, кэш у меня автоматически чистится, и откатить gcc я не могу. Но, если интересуют подробности, помню, что было следующее - при использовании remove_if() с предикатом-лямбдой, он не вставлял в шаблон сгенерированный тип, а подставлял тип по умолчанию. А по умолчанию в шаблоне было написано _Predicate = _Predicate. А такой тип, естественно, не подходил. Вот и все дела. Версия gcc была 4.6.2-*, где * - не знаю, какая цифра, определяющая номер релиза пакета в дистрибутиве. Сейчас 4.6.3-1, и всё работает. Кстати, об этом я уже тоже писал. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |