控件到达非无效函数的末尾[-Wreturn类型]

control reaches end of non-void function [-Wreturn-type]

本文关键字:-Wreturn 类型 无效 函数 控件      更新时间:2023-10-16

我写了一个代码片段,这样:

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的计算结果为truevitz,it!=vect.end(),则您什么都不返回,编译器对此不满意

if(it!=vect.end()) 
gnrt(vect, n+1); // this one 
else 
return n;

您的函数实际上有几个出口点。

  1. 正常出口点,它是由{}包围的函数的末端
  2. return语句

因为此函数期望从所有这些出口点返回一些int值,所以任何未覆盖的出口点都是潜在的警告