我写了一个代码片段,这样:
int gnrt(vector <int> vect, int n)
{
std::vector <int> :: iterator it;
it = find(vect.begin(), vect.end(), n);
if(it!=vect.end()) gnrt(vect, n+1);
else return n;
}
在这里,我试图找到一个与向量中的任何元素都不相似的数字n。但它不断发出警告:
In function 'int gnrt(std::vector<int>, int)':
warning: control reaches end of non-void function [-Wreturn-type]
任何人都请解释一下这里发生了什么。
问题就在这里:
if(it!=vect.end()) gnrt(vect, n+1);
else return n;
您的if案例没有返回值。
你可能想这样做:
if (it!=vect.end())
return gnrt(vect, n+1);
else
return n;
我不知道您使用的是什么编译器,但通常会显示生成错误或警告的行,以帮助您找到问题。
您的函数将返回一个int
int gnrt(vector <int> vect, int n)
但是你的代码没有返回
if(it!=vect.end()) gnrt(vect, n+1);
else return n;
一点重新排列应该表明,如果if condition
的计算结果为true
vitz,it!=vect.end()
,则您什么都不返回,编译器对此不满意
if(it!=vect.end())
gnrt(vect, n+1); // this one
else
return n;
您的函数实际上有几个出口点。
- 正常出口点,它是由{}包围的函数的末端
return
语句
因为此函数期望从所有这些出口点返回一些int
值,所以任何未覆盖的出口点都是潜在的警告