2

std::for_each呼び出し内にラムダ式を作成しました。

その中にこのようなコードがありますが、ビルドエラーがあり、それを教えてくれます

エラー: 'return' の前にプライマリ式が必要です
エラー: 'return' の前に `]' が必要です

私の頭では、それはboost-lambda主にファンクターで機能すると思うので、returnステートメントはそうではないので、呼び出しは機能しません。

それが何であり、それを修正する方法を知っていますか?

ありがとうAFG

名前空間 bl = ブースト::ラムダ;
int a、b;
bl::var_type::type a_( bl::var( a ) );
bl::var_type::type b_( bl::var( b ) );

std::for_each( v.begin(), v.end(), (
// ..ここで何かをする
if_( a_ > _b_ )
[
std::cout << _1,
 戻る
]
));
4

3 に答える 3

4

returnラムダ式内で命令を使用することはできません。のような構造を使用しif_then_else_returnます。結果を生成できる構文を提供します。しかし、あなたの場合returnは必要ありません。ただ捨ててください。

于 2010-07-22T14:53:07.333 に答える
4

boost-lambda を忘れて、代わりに新しい標準 C++ ラムダ式を使用してください。

説明と例

于 2010-07-22T14:55:54.880 に答える
1

@MBZ は正しく、C++11 を使用します (ただし、この場合はラムダではありません)。

C++11 を使用したコードは次のとおりです。

int a, b;
std::vector<int> v;
for(int e : v)
{
  if(a > b)
    std::cout << e;
}

もちろん、ラムダでも同じことができますが、なぜ以下のコードのように複雑にするのでしょうか?

int a, b;
std::vector<int> v;
std::for_each(v.begin(), v.end(), 
  [&a,&b](int e)
  {
    if(a > b)
      std::cout << e;
  }
);
于 2012-12-03T04:40:00.723 に答える