c++ - 条件运算符在 Windows 中成功编译但在 Linux 中出错

标签 c++ linux conditional-operator

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

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

关于c++ - 条件运算符在 Windows 中成功编译但在 Linux 中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19155171/

相关文章:

c++ - 程序停止工作 - graphics.h

linux - 需要相当于 windows "echo %date% %time% %COMPUTERNAME%"的 linux

java - 安装SDX 麻烦org.apache.cocoon.ResourceNotFoundException : No pipeline matched request: index. html

linux - 如何获取内核设备驱动程序代码中各个点的堆栈跟踪

c# - 可空类型和三元运算符 : why is `? 10 : null` forbidden?

Python - 重写BeautifulSoup函数变得更优雅的技巧

c - 为什么我的条件运算符给我一个错误?

c++ - 多核编程/Mandelbrot Set/c++

C++11 unordered_set with std::owner_less-like hashing

c++ - 模板类困境的抽象工厂