【发布时间】:2013-10-09 21:56:20
【问题描述】:
请帮我解释一下我在 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 而不是 else,例如,
c= a?a:/*DO NOTHING*/;
但是,这样我在编译中没有任何成功。任何其他推荐的实现方式。
【问题讨论】:
-
您为什么尝试使用三元运算符纯粹是为了产生副作用?为什么不直接使用
if? -
你使用什么编译器?这里很有可能不仅仅是“Windows”和“Linux”。
-
@svk 三元运算符不仅是为了副作用,而且他真的不想要它的第三部分。这是对三元运算符的滥用。正如你所说,只需使用
if。 -
@ ALL,这不应该有效并且可以接受吗?正如 Joachim 先生所建议的那样。
标签: c++ linux conditional-operator