0

次のコードがあります。

#include <iostream>
int main() {
    int i = 3;
    do {
        (i == 3) ? (std::cout << "Is 3.\n") : ++i;
        ++i;

    } while ( i < 4 );
    return 0;
}

応答で次のエラーが発生しました。

ternary.cc: In function ‘int main()’:
ternary.cc:5:43: error: invalid conversion from ‘void*’ to ‘int’ [-fpermissive]

コードの何が問題になっていますか?

4

2 に答える 2

5

あなたは三項演算子を少し乱用しています。与えられた結果がどこかa ? b : cに保存されることを期待しており、推奨も副作用もありません。bc

問題の根本は、三項演算子がbandcを同じ/同等の型にする必要があることです。「同じ...タイプに解決できる」必要があるというアンドリューの説明は、おそらくより正確です。

それだけの価値があるため、手先の早業 (または見方によってはさらに悪用)を使用して、コードを機能させることができます

#include <iostream>
int main() {
    int i = 3;
    do {
        (i == 3) ? (std::cout << "Is 3.\n", 0) : ++i;
        ++i;

    } while ( i < 4 );
    return 0;
}

または、より明示的に、両方が同じタイプであることを確認してください。

#include <iostream>
int main() {
    int i = 3;
    do {
        (i == 3) ? (std::cout << "Is 3.\n") : (void*)++i;
        ++i;

    } while ( i < 4 );
    return 0;
}
于 2013-01-21T04:37:41.697 に答える
4

三項演算子では、2 つの選択肢が同じデータ型に解決される必要があります。そのままでは使えません。

コンパイラは、2 つの型が異なることを示しています — void*(最初のパスのint型) から (2 番目のパスの型) に変換できません。

于 2013-01-21T04:39:41.410 に答える