简体   繁体   中英

Template function parameter incomplete type c++

I have a template function that I implement by passing as parameter another function cb.

Then I get the types of the arguments that I pass as parameters to the cb function.

template<typename F>
websockets::handle start_subscription (std::string target, std::string payload, F cb) {
    using args_tuple = typename boost::callable_traits::args<F>::type;
    using received_message_type = typename std::tuple_element<3, args_tuple>::type;
    using return_message_type = typename std::tuple_element<4, args_tuple>::type;
    using error_type = typename std::tuple_element<5, args_tuple>::type;

    received_message_type received_message{};
    return_message_type return_message{};
    error_type eerror{};
}


websockets::handle websockets::binance_books(std::vector<std::string> pairs, binance_on_book_received_cb cb) {
    std::string target = binance_build_target(pairs, "bookTicker");
    std::string payload{""};
    return start_subscription(std::move(target), std::move(target), std::move(cb));
}

When I try to instantiate one of the two received_message_type or error_type , I get this error message:

error: incomplete type 'received_message_type' {aka 'izycoinscppapi::exchanges::binance::ws::book_ticker_t'} used in nested name specifier received_message_type received_message = received_message_type::construct(json);

But for return_message_type , it works.

Here is the format of the cb function. I think it's because of the namespace on the receivedmsg and err parameters but I don't understand why.

using binance_on_book_received_cb = std::function<bool(const char *fl, int ec, std::string errmsg, exchanges::binance::ws::book_ticker_t receivedmsg, fh_price_t returnmsg, exchanges::binance::errors::error_t err)>;
    handle binance_books(std::vector<std::string> pairs, binance_on_book_received_cb cb);

I found the reason for the problem. I had not imported the hpp containing the definition of received_message_type and error_type

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM