1

コード

class XXX
{
   vector<Record> getAll()
   {
      dispatch_apply(3, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) {
        for (int j = 0; j < ...; ++j)
        { ... }
      });
    }
}

「'intXXX::j'は'クラスの静的メンバーではありません」と言ってコンパイルしません。ブロックに関するドキュメントには、「ブロックの字句スコープ内で宣言されたローカル変数は、関数内のローカル変数とまったく同じように動作します。」と記載されています。ファイルの拡張子は.mmです。私は何か見落としてますか?

4

1 に答える 1

1

あなたのコードは正しく、clangはそれをコンパイルします。一般に、clangのC ++ブロックのサポートはgccのサポートよりもはるかに優れており、可能であればそれを使用したいと考えています。gccを使用する必要がある場合は、回避策があります。::jを使用してjを参照してください。ただし、これは違法なC ++であり、clangはそれを窒息させるので、どのコンパイラが関与しているかを条件として作成することをお勧めします...

于 2011-05-09T03:10:25.507 に答える