首页 > 解决方案 > 实例化从 std::queue 继承的自定义队列时出错

问题描述

我有一个扩展队列std::queue

template<typename T, typename Container = std::queue<T>>
    class device_queue : public std::queue<T, Container>
    {
     private:
        flag::state state = flag::state::IDLE;

     public:
        void SetState(const flag::state& _state)
        {
            state = _state;
        }

        flag::state GetState() const
        {
            return state;
        }
    };

它被宣布:

device_queue<Event> cpu_queue;

用法只是使用popand front,但我不断收到以下错误消息

/usr/include/c++/9/bits/stl_queue.h: In instantiation of ‘void std::queue<_Tp, _Sequence>::push(const value_type&) [with _Tp = Event; _Sequence = std::queue<Event, std::deque<Event, std::allocator<Event> > >; std::queue<_Tp, _Sequence>::value_type = Event]’:
src/handler.cpp:11:31:   required from here
/usr/include/c++/9/bits/stl_queue.h:260:11: error: ‘class std::queue<Event, std::deque<Event, std::allocator<Event> > >’ has no member named ‘push_back’
  260 |       { c.push_back(__x); }
      |         ~~^~~~~~~~~
/usr/include/c++/9/bits/stl_queue.h: In instantiation of ‘void std::queue<_Tp, _Sequence>::pop() [with _Tp = Event; _Sequence = std::queue<Event, std::deque<Event, std::allocator<Event> > >]’:
src/handler.cpp:92:23:   required from here
/usr/include/c++/9/bits/stl_queue.h:295:4: error: ‘class std::queue<Event, std::deque<Event, std::allocator<Event> > >’ has no member named ‘pop_front’
  295 |  c.pop_front();
      |  ~~^~~~~~~~~

我不确定哪里出错或如何解决此错误。任何帮助将不胜感激

标签: c++

解决方案


当您创建容器类型时,您对queueto有依赖关系,并且它本身并不能满足所有要求。queuequeuequeuequeue

我建议使用 astd::deque作为默认容器,就像默认情况下 a 一样queue

所以而不是

template<typename T, typename Container = std::queue<T>>

做了

template<typename T, typename Container = std::deque<T>>

从 cppreference

"用于存储元素的底层容器的类型。容器必须满足SequenceContainer的要求。此外,它必须提供以下具有通常语义的函数: "

  • back()
  • front()
  • push_back()
  • pop_front()

推荐阅读