在C ++ 11中定义lambda函数不会在类内部编译

时间:2018-02-03 02:29:41

标签: c++ c++11 lambda most-vexing-parse

我试图在c ++类中创建一个lambda函数,但是它给出了编译错误。代码如下:

class Test {

  public:
    struct V {
            int a;
    };

    priority_queue<V, vector<V>, function<bool(V&, V&)>>
            max_heap([](V& a, V& b) { return true; } );

};

我得到的编译错误是:

test.cpp:32:22: error: expected identifier before '[' token
             max_heap([](V& a, V& b) { return true; } );
                      ^
test.cpp:32:35: error: creating array of functions
             max_heap([](V& a, V& b) { return true; } );
                                   ^
test.cpp:32:37: error: expected ')' before '{' token
             max_heap([](V& a, V& b) { return true; } );
                                     ^
test.cpp:32:54: error: expected unqualified-id before ')' token
             max_heap([](V& a, V& b) { return true; } );

有任何解释吗?

1 个答案:

答案 0 :(得分:2)

您无法在类主体内使用()构建类成员。编译器将此解释为尝试创建函数。由于你有C ++ 11,你可以使用大括号初始化来克服这个问题,如

class Test {

  public:
    struct V {
            int a;
    };

    std::priority_queue<V, vector<V>, function<bool(V&, V&)>>
            max_heap{[](V& a, V& b) { return true; } };

};