2016-12-08 16 views
0

以下のコードはVisual Studioで正常にソートされています。
しかし、Ubuntu GCC 4.4.7コンパイラでは、エラーがスローされます。このタイプの構文に慣れていないようです。 GCCでコードを動作させるためにこの行を修正する方法はありますか? (コンパイラはリモートですので、GCCバージョンもアップグレードできません)。 私は右ここでやっていることです:自分の体力が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... 

値についてのベクトルBの要素をソートする(注:行のこの3作品はGCCにMSVCで成功したコンパイルではなく)


私の答えは

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

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

です。それは機能かどうか?私は技術的な名前は知らないが、うまくいくようだ。私はC++に慣れていません。

+0

せずにエラーを与え、あなたはラムダ関数が含まれ、C++ 11を有効にする必要がありあなたはフラグを使用していますか? – Soren

+2

コンパイラに '-std = C++ 11'や' -std = C++ 0x'パラメータを渡すようにIDEやmakefileを作る必要があります – Slava

+1

[lambdasはサポートされていません](https:// gcc .gnu.org/gcc-4.4/cxx0x_status.html)を参照してください。 – Quentin

答えて

2

ラムダをサポートするには古すぎるため、C++をアップグレードする必要があります。私は、GCC 4.8持っていますが、それはまだそう

$ 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 [lambdaをサポートしていない](https://gcc.gnu.org/gcc-4.4/cxx0x_status.html)OPはファンクタを使用する必要があります。 – Mgetz

+0

ubuntuとgccを使用して – Soren

+0

をお返事ありがとうございます。 –

関連する問題