Когда я компилирую эту программу на 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;
}
Это означает, что он не может найти определение для int cnt(int);
, который main()
использует и вы вперед объявляете.
Вместо этого вы определяете:
int cnt(int x[30]) { ... }
Это две разные подписи. Один принимает целочисленный аргумент, а другой — массив целых.
Кроме того, это утверждение неверно:
q=cnt(x[30]);
Это занимает тридцать первый элемент с индексом 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
, который представляет собой весь массив (или, точнее, адрес первого элемента указанного массива).