void PacketRecord::determineAppProtocol()
{
if (ipProtocol == IP_PROTO_UDP)
{
std::istringstream ss(udpData);
std::string line;
if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
{
appProtocol = APP_PROTO_SIP;
}
else
{
appProtocol == APP_PROTO_RTP;
}
}
else
{
appProtocol = APP_PROTO_UNKNOWN;
}
}
如果内部if语句无法计算为true,我希望执行else块(appProtocol设置为APP_PROTO_RTP)。但是,这不会发生。相反,似乎else语句完全被忽略了。我无法理解为什么会这样。
从我的gdb会话中可以看到,if语句第一次工作,appProtocol设置为APP_PROTO_SIP(如预期的那样)。第二次,if失败但不是进入else并将appProtocol设置为APP_PROTO_RTP,它完全退出函数而不设置appProtocol。 appProtocol保持设置为APP_PROTO_INVALID(它在PacketRecord ctor中初始化的值)。
Breakpoint 1, PacketRecord::determineAppProtocol (this=0x805c6c8) at PacketRecord.cpp:156
156 if (ipProtocol == IP_PROTO_UDP)
(gdb) step
158 std::istringstream ss(udpData);
(gdb)
159 std::string line;
(gdb)
160 if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
(gdb)
162 appProtocol = APP_PROTO_SIP;
(gdb)
167 }
(gdb)
173 }
(gdb) continue
Continuing.
Breakpoint 1, PacketRecord::determineAppProtocol (this=0x8065388) at PacketRecord.cpp:156
156 if (ipProtocol == IP_PROTO_UDP)
(gdb) step
158 std::istringstream ss(udpData);
(gdb)
159 std::string line;
(gdb)
160 if (getline(ss, line) && (line.find("SIP/2.0") != std::string::npos))
(gdb)
167 }
(gdb)
173 }
(gdb)
答案 0 :(得分:19)
你应该替换
appProtocol == APP_PROTO_RTP;
通过
appProtocol = APP_PROTO_RTP;
(没有双等号)
执行else语句。但是你没有将值赋给appProtocol。
答案 1 :(得分:5)
你没有分配,你在比较。使用=
,而不是==
答案 2 :(得分:3)
你在这里使用了一个相等的陈述:
appProtocol == APP_PROTO_RTP;
而不是分配。
正确的代码是:
appProtocol = APP_PROTO_RTP;