2017-01-06 6 views
1

Я пытаюсь найти, если все элементы вектора y равны 1. Следующий код отлично работает в Visual Studio, но с g ++ в linux (g ++ -std = C++ 0x) это дает мне эту ошибку: ожидается, первичное-выражение, прежде чем «[» лексемаg ++: ожидаемое первичное выражение перед '[' token

bool x = all_of(y.begin(), y.end(), [](unsigned char j) {return j == 1;}); 

Любая помощь будет оценена.

Мой GCC версии: g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)

+1

Какую версию г ++ вы используете? – NathanOliver

+1

Вы уверены, что вы включили C++ 11? Или, возможно, у вас есть древняя версия g ++. – drescherjm

+0

'-std = C++ 0x' Предлагается старый компилятор. Какая версия GCC? –

ответ

1

Лямбда не поддерживаются в GCC 4.4. Вы можете обновить ваш компилятор до версии 4.5 или выше, или использовать функцию:

bool compFun(int i) { 
    return i == 1; 
} 
... 
bool res = all_of(a.begin(), a.end(), compFun); 

Here is a live example.

3

Lambdas are not supported in GCC 4.4.

Обновите свой компилятор. Вам нужен GCC 4.5 или выше, но, если сможете, вы попадаете в современное время.

+0

Как Turbo C++, я слышал, что это довольно хорошо –

+1

@GillBates вы издеваетесь, но Turbo C++ возвращается, человек. Также как Диско. – user4581301

2

Ваш компилятор не поддерживает выражение лямбда. Компиляторы не поддерживают все функции, которые поставляются с C++ 11 или новыми входящими стандартами. Поэтому вам нужно проверить, какие стандарты поддерживает компилятор. Screenshot of compilation on GCC 4.4.7

Вы можете увидеть, если я выбираю GCC-4.4.7 ту же ошибку (ошибка лямбда-выражение), но если я выбираю GCC-4.5.3

Screenshot of compilation on GCC 4.5.2

Нет ошибок. Итак, вы должны изменить свой компилятор (> = gcc-4.5), чтобы использовать выражение lamda.

C++ Standards Support in GCC

Смежные вопросы