0

コード

int cycle_length(int i, int j) {
    int cycleLength = 0;
    for (int k = i; k <= j; k++) {
        cout << algorithm(k) << endl;
        if (algorithm(k) > cycle_length) {
            cycleLength = algorithm(k);
        }
    }
    return cycleLength;
}

ISO C++ forbids comparison between pointer and integer [-fpermissive]

この行でこのエラーが発生しましたif ( algorithm(k) > cycle_length)

しかし、同じコードがmain()??で正しく機能するのはなぜですか。そして、このエラーはどういう意味ですか???

追加され たアルゴリズムは、整数入力を取り、整数を返す関数です。

int algorithm(int number1) {
    int counter = 1, number = number1;
    do {
        if (number % 2 == 0) {
            number = number / 2;
            counter++;
        } else {
            number = (3 * number) + 1;
            counter++;
        }
    } while (number != 1);

    return counter;
}
4

1 に答える 1

9

関数の名前を、ほぼ同じ名前のローカル変数と混同しています。

int cycle_length(int i, int j)
{
    int cycleLength

関数が呼び出されcycle_length、変数が呼び出されますが、さらに下cycleLengthを使用しています。cycle_length

コンパイラは「変数名と関数名を比較して、類似したものがあるかどうかを確認し、入力が間違っている可能性があることを示唆する」ことを行わないため、エラーメッセージは少し奇妙です-単に「うーん、あなたは関数ポインター [関数の名前から得られるもの] を整数と比較する、それは正しくありません!"

于 2013-01-29T17:57:09.067 に答える