2017-01-06 5 views
1

ベクトルyのすべての要素が1であるかどうかを調べようとしています。次のコードはVisual Studioではうまく動作しますが、linux(g ++ -std =私はこのエラーが表示されます: '['トークンの前に期待されるprimary-expression]g ++: '['トークンの前に期待されるprimary-expression

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

ターボC++のように、それはかなり良いと聞きました –

+1

@GillBatesあなたは嘲笑しますが、ターボ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

エラーなしを選択した場合。要約すると、lamda式を使用するにはコンパイラ(> = gcc-4.5)を変更する必要があります。

C++ Standards Support in GCC

関連する問題