c++ - 实例化从 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;
用法只是使用pop
and 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();
| ~~^~~~~~~~~
我不确定哪里出错或如何解决此错误。任何帮助将不胜感激
解决方案
当您创建容器类型时,您对queue
to有依赖关系,并且它本身并不能满足所有要求。queue
queue
queue
queue
我建议使用 astd::deque
作为默认容器,就像默认情况下 a 一样queue
。
所以而不是
template<typename T, typename Container = std::queue<T>>
做了
template<typename T, typename Container = std::deque<T>>
"用于存储元素的底层容器的类型。容器必须满足SequenceContainer的要求。此外,它必须提供以下具有通常语义的函数: "
back()
front()
push_back()
pop_front()
推荐阅读
- android - 为文档自动生成 ID,而不是在 Firestore 中收集
- sql - 具有字段的对象(一对多关系)在实体框架中变为没有字段
- eloqua - Eloqua Landing Pages 是否支持任何脚本语言?
- python - 为什么 dict_items 对象不支持索引?
- cython - 如何分析另一个python脚本调用的cython代码?
- mysql - “MySql.Data.MySqlClient.MySqlException:在创建新的 ADO NET 模型 VS 2015 时,操作‘UNION’的排序规则的非法混合
- vue.js - 基于路由参数中的值在计算属性中设置的 Vuejs 条件对象
- javascript - 如何使移动设备的导航栏菜单占据我设备屏幕的 100%
- google-admin-sdk - Google Admin SDK Push API 发送“同步”网络挂钩,但仅此而已
- multithreading - 启动多个同步 rsync 进程以在每个子目录中复制一个文件 (maxdepth -1)