Определение лямбда-функции в C++11 не компилируется внутри класса

Я пытался создать лямбда-функцию внутри класса C++, но это дает ошибку компиляции. Код выглядит так:

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 ответ

Решение

Вы не можете создать член класса, используя () внутри тела класса. Компилятор интерпретирует это как попытку создать функцию. Поскольку у вас есть 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; } };

};
Другие вопросы по тегам