如何向queue中加入自定义的数据类型?

bdview 2020-07-21 12:16:52

添加常规数据类型时,很简单:


std::queue<int> reqQueue;
reqQueue.push(1);


但是当我向插入自己定义的数据类型的时候就犯难了:

比如我的对象:


class ReqMsg
{
public:
ReqMsg(string &m,string &p,int ver,int id)
{
method = m;
params = p;
_ver = ver;
_id = id;
}
~ReqMsg();
string method; //方法名
string params; //参数
int _ver; //版本
int _id; //id
}


我不能直接这样添加吧:

std::queue<ReqMsg> reqQueue;
reqQueue.push(new ReqMsg);



...全文
473 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
bdview 2020-07-22
  • 打赏
  • 举报
回复
引用 5 楼 真相重于对错 的回复:
你e]
你这个方法还真是管用了! 有个疑问想问你 为什么我的构造函数是下面这个的时候:
	ReqMsg(string &m, string &p, int ver, int id)
	{
		method = m;
		params = p;
		_ver = ver;
		_id = id;
	}
这样用 MsgQueue.push(ReqMsg("name1", "param1", 2, 1)); 为何报错: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2440 “<function-style-cast>”: 无法从“initializer list”转换为“ReqMsg” easyTest e:\svndir\15--c++学习\c++ exercise\easytest\easytest\easytest.cpp 185 改成这样也不行: MsgQueue.push(ReqMsg(string("name1"), string("param1"), 2, 1)); 把构造函数改成:
 ReqMsg(const string& m, const string& p, int ver, int id)
    {
        method = m;
        params = p;
        _ver = ver;
        _id = id;
    }
然后这样用才可以: MsgQueue.push(ReqMsg("name1", "param1", 2, 1));
真相重于对错 2020-07-22
  • 打赏
  • 举报
回复
你的类的构造函数参数既然要引用,最好传递const string&
#include <iostream>
#include <queue>
#include <string>
using namespace std;
class ReqMsg
{
public:
    ReqMsg(const string& m, const string& p, int ver, int id)
    {
        method = m;
        params = p;
        _ver = ver;
        _id = id;
    }
    ~ReqMsg() {};
    string method; //方法名
    string params; //参数
    int _ver;       //版本
    int _id;        //id
};
int main() {
    queue<ReqMsg> q;
    q.push(ReqMsg(string("abc"), string("edf"), 1,4));
    return 1;
}
真相重于对错 2020-07-22
  • 打赏
  • 举报
回复
引用 3 楼 bdview 的回复:
[quote=引用 2 楼 真相重于对错 的回复:]std::queue<ReqMsg> reqQueue; reqQueue.push(ReqMsg());
你这个不行[/quote] 你的类没有默认构造函数.
bdview 2020-07-22
  • 打赏
  • 举报
回复
引用 2 楼 真相重于对错 的回复:
std::queue<ReqMsg> reqQueue; reqQueue.push(ReqMsg());
你这个不行
真相重于对错 2020-07-21
  • 打赏
  • 举报
回复
std::queue<ReqMsg> reqQueue; reqQueue.push(ReqMsg());
smwhotjay 2020-07-21
  • 打赏
  • 举报
回复
std::queue<ReqMsg*> reqQueue; ReqMsg* a=new ReqMsg(); reqQueue.push(a); reqQueue删除了元素时,记得delete ;

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧