1

请帮助我找出在 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*/;

但是,这样我在编译方面没有取得任何成功。任何其他推荐的方法来实现它。

4

2 回答 2

3

您必须将零转换为void,例如

condition ? expression : (void) 0;

原因是setSvcsetObj都被声明为返回void(如错误消息中所示)。这意味着您调用它们的表达式的结果是什么。但另一个“假”表达式是一个有值的表达式。所以三元表达式有一个不返回值的分支和一个返回值的分支,这是不允许的。将“false”表达式转换为void使两个分支相同。

于 2013-10-03T09:13:07.653 回答
1

不,您不能以这种方式使用三元运算符,因为它使用 3 个参数进行操作:

expression1 : expression2 ? expression3

但你总是可以这样做:

c = a ? a : c;
于 2013-10-03T09:15:27.073 回答