我在说重载函数“calMean”的实例与参数列表不匹配时出错
这是我的密码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILE_NAME 20
#define LIST_SIZE 50
float calMean(RECORD list[], int count)
typedef struct
{
char *name;
int score;
}RECORD;
int main (void)
{
// Declarations
float mean;
FILE *fp;
char fileName[FILE_NAME];
RECORD list[LIST_SIZE];
char buffer[100];
int count = 0;
int i;
// Statements
printf("Enter the file name: ");
gets(fileName);
fp = fopen(fileName, "r");
if(fp == NULL)
printf("Error cannot open the file!\n");
while(fgets(buffer, 100, fp) != NULL)
{
if( count >= LIST_SIZE)
{
printf("Only the first 50 data will be read!\n");
break;
}
if( count < LIST_SIZE)
{
list[count].name = (char*) malloc(strlen(buffer)*sizeof(char));
sscanf(buffer,"%[^,], %d", list[count].name, &list[count].score);
printf("name is %s and score is %d\n", list[count].name, list[count].score);
count++;
}
for( i =0; i < (LIST_SIZE - count); i++)
{
list[count + i].name = 0;
list[count + i].score = 0;
}
}
printf("Read in %d data records\n", count);
mean = calMean(list, count);
fclose(fp);
return 0;
}
float calMean(RECORD list[], int count)
{
float tempMean;
int sum;
int i;
for(i = 0; i < count; i++)
sum += list[i].score;
tempMean = sum/count;
return tempMean;
}
这个错误发生在main中calMean函数的函数调用上,我是新来的结构,所以我认为我在calMean函数调用中编写列表参数列表的方式是错误的,有什么办法可以解决这个问题吗?我正在计算结构中成员得分的平均值。
最佳答案
麻烦很有趣。你展示的不是你正在编译的代码,这总是坏消息。你所拥有的是:
float calMean(RECORD list[], int count); // semicolon missing in original
typedef struct
{
char *name;
int score;
}RECORD;
...
float calMean(RECORD list[], int count)
{
...
}
请注意,在首次声明
RECORD
和定义calMean()
之间,以某种方式重新定义了类型calMean()
,但不会导致编译错误。这意味着您有两个
RECORD
的声明,但它们引用第一个参数中的不同类型。因此就有了“超载”的说法。您必须使用C++编译器。
我想不出一种方法可以编写如图所示的代码,因此的含义会发生这样的变化。我试过这个密码:
struct RECORD { int x; };
float calMean(RECORD list[], int count);
typedef struct { int y; } RECORD;
float calMean(RECORD list[], int count);
但是G++4.7.1说:
x.cpp:5:31: error: conflicting declaration ‘typedef struct RECORD RECORD’
x.cpp:1:12: error: ‘struct RECORD’ has a previous declaration as ‘struct RECORD’