• 5384阅读
  • 9回复

Qdatastream operator<<()重载问题 [复制链接]

上一主题 下一主题
离线jiang0736
 
只看楼主 倒序阅读 楼主  发表于: 2011-11-03
QDataStream &operator >>(QDataStream &ds, package &pkg)
{
    ds >> pkg.pack_type;
    ds >> pkg.info_type;
    ds >> pkg.time.year >>pkg.time.month >>pkg.time.day >> pkg.time.hour >> pkg.time.minute >>pkg.time.second ;
    ds >> pkg.msg;
    return ds;
}

我这样重载错在哪里/.package 是自定义类型
编译出现这样的错误:
client.cpp:140: error: no match for 'operator>>' in 'ds >> pkg.package::pack_type'



QDataStream &operator <<(QDataStream &ds, const package &pkg)
{
    ds << pkg.pack_type;
    ds << pkg.info_type;
    ds << pkg.time.year << pkg.time.month << pkg.time.day << pkg.time.hour << pkg.time.minute << pkg.time.second;
    ds << pkg.msg;
    return ds;
}

这样又没问题...请大家指教
离线wxj120bw

只看该作者 1楼 发表于: 2011-11-03
回 楼主(jiang0736) 的帖子
标识client.cpp:140 错误在那 自定义package贴下
离线jiang0736
只看该作者 2楼 发表于: 2011-11-04
回 1楼(wxj120bw) 的帖子
struct package{
    char pack_type; //报文类型
    char info_type; //信息类型
    timelable time; //报文时间
    package_data *msg;      //信息
};

错误140 就是在重载的第一行.
QDataStream &operator>>(QDataStream &in,  package pkg)
{  
in >> pkg.pack_type;  
in >> pkg.info_type;    
in >> pkg.time.year >>pkg.time.month >>pkg.time.day >> pkg.time.hour >> pkg.time.minute >>pkg.time.second ;    
in >> pkg.msg;  
return in;
}

离线wxj120bw

只看该作者 3楼 发表于: 2011-11-04
回 2楼(jiang0736) 的帖子
ds >> (char)(pkg.pack_type);
这样尝试(强制类型转换)
离线jiang0736
只看该作者 4楼 发表于: 2011-11-04
回 3楼(wxj120bw) 的帖子
好的.我试下.
离线jiang0736
只看该作者 5楼 发表于: 2011-11-04
大哥,还是不行啊.好像有的时候可以,有的时候不行.不知道是为什么 ...
离线jdwx

只看该作者 6楼 发表于: 2011-11-04
回 5楼(jiang0736) 的帖子
还是换个类型吧,要不用QDataStream &    readBytes ( char *& s, uint & l )
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线wxj120bw

只看该作者 7楼 发表于: 2011-11-04
回 5楼(jiang0736) 的帖子
你这个编译错误怎么可能有时可以 有时不行 不行的时候贴出错误代码
离线jiang0736
只看该作者 8楼 发表于: 2011-11-04
我把pack_type改为char *就可以,改为char就不行,
出现下面的错误

是不是它不能重载char 类型的数据呢?
离线wxj120bw

只看该作者 9楼 发表于: 2011-11-04
回 8楼(jiang0736) 的帖子
你尝试将pack_type类型改成int 执行ds >> (int)(pkg.pack_type); 看编译还报错吗
PS:只为测试
快速回复
限100 字节
 
上一个 下一个