управление достигает конца не пустой функции [-Wreturn-type] - PullRequest
0 голосов
/ 26 октября 2019

Я написал фрагмент кода так:

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]

Кто-нибудь, пожалуйста, объясните, что здесь происходит.

Ответы [ 2 ]

1 голос
/ 26 октября 2019

ожидается, что ваша функция вернет 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;

У вашей функции есть пара точек выхода.

  1. нормальная точка выхода, являющаяся концом функции, окруженная {}
  2. оператором return

, поскольку эта функция ожидает, что некоторое значение int будет возвращено извсе эти точки выхода любая открытая точка выхода является потенциальным предупреждением

1 голос
/ 26 октября 2019

Проблема здесь:

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

Ваш if case не возвращает значение.

Вы, вероятно, хотите сделать это:

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

Я понимаюВы не знаете, какой компилятор вы используете, но, как правило, отображается строка, в которой генерируется ошибка или предупреждение, чтобы помочь вам найти проблему.

...