C++ Can';无法从字符串流接收信息

C++ Can';无法从字符串流接收信息,c++,c++17,C++,C++17,因此,我试图使用std::stringstream将信息序列化为字符串,但编译器不喜欢我 enum PacketType : unsigned int { PacketType_unknown = 0, PacketType_ping, PacketType_server_welcome, PacketType_client_greetings, }; std::stringstream ss; unsigned int v

因此,我试图使用
std::stringstream
将信息序列化为字符串,但编译器不喜欢我

enum PacketType : unsigned int {
        PacketType_unknown = 0,
        PacketType_ping,
        PacketType_server_welcome,
        PacketType_client_greetings,
    };
std::stringstream ss;
unsigned int v;
PacketType p;
ss << (unsigned int)somevalue;
// error here
ss >> p;
enum PacketType:unsigned int{
PacketType_未知=0,
包装类型:,
打包类型\u服务器\u欢迎,
包装类型为客户问候语,
};
std::stringstream-ss;
无符号整数v;
包装类型p;
ss>p;
错误是:

no match for 'operator>>' (operand types are 'std::stringstream' {aka 
'std::__cxx11::basic_stringstream<char>'} and 'PacketType')GCC
与“operator>>”不匹配(操作数类型为“std::stringstream”{aka
'std::uucxx11::basic_stringstream'}和'PacketType')GCC

编辑:忘了太多东西,因为我觉得它不重要,我终于明白了,我的代码不起作用的原因是

PacketType
!=<代码>无符号整数。 PacketType是它自己的类型。即使它基于
无符号int

所以我要做的就是

unsigned int s;
ss >> s;
somevalue = static_cast<PacketType>(s);
无符号整数s;
ss>>s;
somevalue=静态施法;
不过还是很奇怪。。。
不应该
PacketType
inherit
unsigned int

请粘贴您所看到的错误getting@borievka哎呀,你没有提供完整的代码。但是由于这个错误,我们知道,
somevalue
的类型是
CPacket::PacketType
,并且您没有提供重载的
操作符>
来自动将其放入流中。您需要提供该运算符,或者调用某些方法,通常是
到\u string()
。但是,
cpakset::PacketType
必须提供这个功能,我猜
ss>>static\u cast(p)我没有看到处理
PacketType
运算符>>
重载。不,尽管与类的语法类似,枚举并不“继承”无符号整数,也不能隐式转换为一个。事实上,这就是作用域枚举的全部要点。只要你自己把它写在
unsigned int
上就行了……有时候我很高兴在评论之前检查新的评论。省了我一些打字的时间。我做了这个评论,完全烧掉了它。代码不应该工作,你需要显式地
static\u cast
,以便将它分配给
somevalue
@unquality\u mark编译器没有反对它的字眼,因为我在测试中将它定义为
Packet::Type:unsigned int
GCC,Clang和MSVC不一致:(添加C++17标志不会改变这一点。)