Ошибка 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
, который является целым массивом (или, точнее, адресом первого элемента указанного массива).