提问者:小点点

错误:无法根据转换为类型“int”来解析重载函数


我编写了如下代码:

#include<bits/stdc++.h>
using namespace std;
int lengthOfLastWord(string A) {
    int m= A.size();
    int i=0;
    while(i<m)
    {
        if(A[i]==' ')
        {
            int count=0;
            i++;
            while(A[i]!=' ')
            {
                count++;
                i++;
            }
        }
        else
        i++;
    }
    return count;
}
int main()
{
    string A;
    getline(cin,A);
    cout<<lengthOfLastWord(A);
}

但它显示以下错误

error: cannot resolve overloaded function ‘count’ based on conversion to type ‘int’

我无法理解为什么它显示这个错误以及我应该做什么来修复它。 请帮帮我。 谢谢你


共3个答案

匿名用户

if范围内,您的count变量与std::count发生冲突(从技术上说是“隐藏”)。 但是,您的本地count不存在于return语句的作用域中,因此编译器正在尝试使用它在此时所知道的唯一的count,即std::count

这是一个很好的例子,说明了为什么使用命名空间std#include都不是好主意。 如果使用了正确的include和namespace,这段代码会给出更清晰的编译错误:

error: 'count' was not declared in this scope

匿名用户

最直接的原因是因为您的count变量是在if作用域中定义的,而在return语句的作用域中不可用。

但是,您看到的错误是令人困惑的,因为您的代码中使用了名称空间std,并且它使得完全不相关的函数std::count在程序中的任何地方都可见,包括您的return语句。 从编译器的角度来看,您试图返回一个指向std::count的指针,但由于该函数是重载模板,因此编译器不知道您试图返回的是哪一个--这就是错误的措辞。

如果您从代码中删除using namespace std,那么您的代码仍然无法编译,但是错误消息会更容易理解。

匿名用户

一个解决方案是将您的count变量重命名为其他内容,如total

编译器正在考虑std::count函数,而不是count变量int