ошибка: 'x' не является типом, где x является аргументом конструктора - PullRequest
0 голосов
/ 20 января 2020
class Example {
    //...
    static auto make = []() -> std::shared_ptr<receiveObject> {
        return std::make_shared<receiveObject>(Params::EchoBufferSize);
    };

    static auto recycle = [](std::shared_ptr<receiveObject> o) {
        //nothing for now
    };
    recycle::shared_pool<receiveObject> receivePool(make, recycler);
};

Но я получаю

In file included from /home/project/AIPTCPClient.cpp:57:0:
/home/project/AIPTCPClient.h:312:57: error: 'make' is not a type
         recycle::shared_pool<receiveObject> receivePool(make, recycler);
                                                         ^~~~
/home/project/AIPTCPClient.h:312:63: error: 'recycler' is not a type
         recycle::shared_pool<receiveObject> receivePool(make, recycler);
                                                               ^~~~~~~~

Как вы можете видеть в shared_pool , для этого требуются две функции, поэтому я передаю свои лямбды. Но С ++ жалуются, что они должны быть типами. Я не понимаю Зачем конструктору нужен тип вместо объекта?

1 Ответ

4 голосов
/ 20 января 2020

Инициализатор члена по умолчанию (начиная с C ++ 11) поддерживает только инициализатор со скобками и инициализатор со знаком равенства, но не инициализатор в скобках; поэтому измените

recycle::shared_pool<receiveObject> receivePool(make, recycler);

на

recycle::shared_pool<receiveObject> receivePool{make, recycler};

или

recycle::shared_pool<receiveObject> receivePool = recycle::shared_pool<receiveObject>(make, recycler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...