请帮我找出我在 Linux 环境中使用此语句时遇到的错误的原因。
p_pAphErrorMessage->getSvc()?l_AphUpdateMessage->setSvc(p_pAphErrorMessage->getSvc()):0;
p_pAphErrorMessage->getObj()?l_AphUpdateMessage->setObj(p_pAphErrorMessage->getObj()):0;
这段代码在windows下编译成功,但在Linux环境下报错。
src/aph.cpp:7320: error: âl_AphUpdateMessage->AphMessage::setSvc(((AphUpdateMessage*)p_pAphErrorMessage)->AphUpdateMessage::<anonymous>.AphFidValuesMessage::<anonymous>.AphMessage::getSvc())â has type âvoidâ and is not a throw-expression
src/aph.cpp:7321: error: âl_AphUpdateMessage->AphMessage::setObj(((AphUpdateMessage*)p_pAphErrorMessage)->AphUpdateMessage::<anonymous>.AphFidValuesMessage::<anonymous>.AphMessage::getObj())â has type âvoidâ and is not a throw-expression
我稍微调查了一下,怀疑返回 0;可能是它的原因。 我们能否以这种方式使用条件运算符来仅用于 if not for else,例如,
c= a?a:/*DO NOTHING*/;
但是,这样我在编译中没有取得任何成功。任何其他推荐的实现方式。
最佳答案
您必须将零转换为 void
,例如
condition ? expression : (void) 0;
原因是 setSvc
和 setObj
都声明为返回 void
(如错误消息中所示)。这意味着您调用它们的表达式的结果是空的。但是另一个“假”表达式是一个有值的表达式。所以三元表达式有一个不返回值的分支和一个返回值的分支,这是不允许的。将“false”表达式转换为 void
使两个分支相同。
关于c++ - 条件运算符在 Windows 中成功编译但在 Linux 中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19155171/