Ошибка C++: "неопределенная ссылка на cnt(int) collect2: error: ld вернул 1 состояние выхода

Когда я компилирую эту программу на C, я получаю сообщение об ошибке:

In function `main': maxcount.cpp:(.text+0x63): undefined reference to `cnt(int)'

collect2: error: ld returned 1 exit status

Что это значит? Вот код:

#include<iostream>
using namespace std;
int cnt(int);
int main()
{
  int x[30],i,j,q;
  cout<<"enter x[i]";
  for(i=0;i<7;i++)
  {
    cin>>x[i];
  }
  q = cnt(x[30]);
}
int cnt(int x[30])
{
  int i,j;
  int max=x[0];
  int count=0;
  for(i=0;i<7;i++)
  {
    if(x[i]>max)
    {
      max=x[i];
    }
    else
    {
      max=x[0];
    }
  }
  for(i=0;i<7;i++)
  {
    if(max==x[i])
    {
      count++;
    }
  }
  cout<<count;
  return 0;
}

2 ответа

Решение

Это означает, что он не может найти определение для int cnt(int);, который main() использует и вы вперед объявляете.

Вместо этого вы определяете:

int cnt(int x[30]) { ... }

Это две разные подписи. Один принимает целочисленный аргумент, а другой - массив целых.

Кроме того, это утверждение неверно:

q=cnt(x[30]);

Это берет 31-й элемент с индексом 30 от x массив. Тем не мение, x объявляется только размером 30. Поскольку вы используете x как массив внутри вашей функции, вы, вероятно, просто хотите изменить свое предварительное объявление на:

int cnt(int[30]);

И затем вызовите это так:

q = cnt(x);
int cnt(int x[30]) { ... }

это не то же самое, что:

int cnt(int x) { ... }

Хотя вы объявляете прототип для функции, принимающей одно целое число, вы никогда не определяете такую ​​функцию. Вместо этого вы определяете один, берущий массив.

Вам необходимо выяснить, хотите ли вы передать массив или элемент массива. Вызов:

q=cnt(x[30]);

пытается передать 31-й элемент массива (которого, кстати, не существует). Я подозреваю (так как вы разыменовываете x в функции) ты наверное хотел просто пройти x, который является целым массивом (или, точнее, адресом первого элемента указанного массива).

Другие вопросы по тегам