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;

その理由は、 と の両方がsetSvc戻りsetObjvoidとして宣言されているためです (エラー メッセージに示されているように)。これは、それらを呼び出した式の結果が何もないことを意味します。しかし、もう 1 つの「偽」の式は、値を持つ式です。したがって、三項式には、値を返さない分岐が 1 つと、値を返す分岐が 1 つありますが、これは許可されていません。「false」式をキャストするとvoid、両方のブランチが同じになります。

于 2013-10-03T09:13:07.653 に答える
1

いいえ、3 つの引数で動作するため、この方法で三項演算子を使用することはできません。

expression1 : expression2 ? expression3

しかし、あなたはいつでもできる:

c = a ? a : c;
于 2013-10-03T09:15:27.073 に答える