所以我正在尝试使用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;

错误是:
no match for 'operator>>' (operand types are 'std::stringstream' {aka
'std::__cxx11::basic_stringstream<char>'} and 'PacketType')GCC

编辑:忘了添加太多的东西,因为我认为这并不重要

最佳答案

我终于弄清楚了,我的代码无法正常工作的原因是...
PacketType!= unsigned int
PacketType是它自己的类型。即使它基于unsigned int

所以我要做的就是

unsigned int s;
ss >> s;
somevalue = static_cast<PacketType>(s);

仍然很奇怪...PacketType不应该继承unsigned int

08-26 15:38