我编写了如下代码:
#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’
我无法理解为什么它显示这个错误以及我应该做什么来修复它。 请帮帮我。 谢谢你
在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
。