【问题标题】:ISO C++ forbids comparison between pointer and integer [-fpermissive]ISO C++ 禁止指针和整数之间的比较 [-fpermissive]
【发布时间】:2013-01-29 17:52:49
【问题描述】:

守则

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) &gt; 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;
}

【问题讨论】:

  • algorithm 是如何定义的?
  • 算法(k)返回一个指针?你有其他算法()吗?

标签: c++ iso


【解决方案1】:

您将函数名称与几乎同名的局部变量混淆了:

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

你的函数被称为cycle_length,你的变量被称为cycleLength——但你在下面使用cycle_length

错误信息有点奇怪,因为编译器没有做“比较变量名和函数名,看看是否有相似的,然后建议你可能只是输入错误”——它只是说“嗯,您正在将一个函数指针 [从函数名称中得到的] 与一个整数进行比较,这不成立!”

【讨论】:

  • clang 可能会提出更好的建议。让我在这里试试。
  • 它没有提出更好的建议,但错误消息包含类型,因此您可以看出您正在与函数指针进行比较。这仍然比 gcc 好,但不如尝试纠正错字那么好。消息:excpp.cpp:13:27: error: comparison between pointer and integer ('int' and 'int (*)(int, int)') 另一个使用clang 的好理由!
  • 我注意到,clang 通常会给出稍微冗长的错误消息 [当你有很多错误时,这可能会有点烦人,因为第一个错误在你看到之前就滚出了屏幕它...]
  • 好吧,大多数时候我都没有遇到问题 - 但有时你会遇到其中一种情况,其中一些缺失/额外的字符会导致很多错误...... [缺少分号头文件是最喜欢的]。
  • 是的,但是在分号情况下,clang 给出的错误比 gcc 更好。包括一个关于把它放在哪里的建议。在这种情况下,一点点滚动绝对是值得的,尤其是对于初学者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多