2016-12-08 2 views
0

Код, сортирующий в Visual Studio успешно.
Но в компиляторе Ubuntu GCC 4.4.7 возникает ошибка. Кажется, он не знаком с этим типом синтаксиса. Как исправить эту строку, чтобы код работал в GCC? (компилятор удален, поэтому я не могу обновить версию GCC). Что я делаю здесь: сортировка элементы вектора B относительно их пригодности значенияОшибка компилятора в функции std :: sort (GCC 4.4)

//B is a Vector of class Bird 
//fitness is a double - member of Bird objects 

vector<Bird> Clone = B; 

    sort(Clone.begin(), Clone.end(), [](Bird a, Bird b) { return a.fitness> b.fitness; }); 

//error: expected primary expresssion before '[' token 
//error: expected primary expresssion before ']' token... 

(Примечания: это 3 части линий компилирования успешных в MSVC, но не в НКУ)


моего ответа is

bool X_less(Bird a, Bird b) { return a.fitness > b.fitness; } 

std::sort(Clone.begin(), Clone.end(), &X_less); 

Кажется, что нужно работать. Это функция или нет? Я не знаю его технического названия, но, похоже, он работает. Я не очень хорошо знаком с C++.

+0

Какой компилятор флаги вы используете? – Soren

+2

вам нужно сделать свой IDE или makefile для передачи параметру '-std = C++ 11' или' -std = C++ 0x' компилятору – Slava

+1

Похоже, что [lambdas не поддерживается] (https: // gcc .gnu.org/gcc-4.4/cxx0x_status.html) в GCC 4.4. – Quentin

ответ

2

Вам нужно будет обновить свой C++, поскольку 4.4 слишком старый, чтобы поддерживать Lambda. У меня есть Gcc 4,8, но она по-прежнему требует включения C++ 11, который включает в себя лямбда-функции, так

$ g++ -std=c++11 x.cc 

компилирует этот прекрасный

#include <algorithm> 
#include <functional> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<int> Clone; 

    sort(Clone.begin(), Clone.end(), [](int a, int b) { return a> b; }); 
} 

, но все еще дает ошибки без -std=c++11 опции

+1

Неправильный компилятор, GCC 4.4 [не поддерживает lambdas] (https://gcc.gnu.org/gcc-4.4/cxx0x_status.html) OP должен будет использовать функтор. – Mgetz

+0

Спасибо - обновить ответ – Soren

+0

с помощью ubuntu и gCC –

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