-2

当我编译这个 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;
}
4

2 回答 2

1

这意味着它找不到使用的定义int cnt(int);main()并且您转发声明。

相反,您定义:

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

这是两个不同的签名。一个接受一个整数参数,另一个接受一个整数数组。

此外,这个说法是不正确的:

q=cnt(x[30]);

这将获取数组中索引 30 处的第 31 个x元素。但是,x仅声明大小为 30。由于您x在函数中用作数组,因此您可能只想将前向声明更改为:

int cnt(int[30]);

然后像这样调用它:

q = cnt(x);
于 2013-01-19T04:26:58.660 回答
1
int cnt(int x[30]) { ... }

一样

int cnt(int x) { ... }

当您声明一个采用单个整数的函数的原型时,您永远不会定义这样的函数。相反,您定义一个采用数组。

您需要弄清楚是要传递数组还是数组的元素。来电:

q=cnt(x[30]);

尝试传递数组的第 31 个元素(顺便说一下,它不存在)。我怀疑(因为您x在函数中取消引用)您可能只想传递x,这是整个数组(或者,更准确地说,是所述数组的第一个元素的地址)。

于 2013-01-19T04:26:59.020 回答