我在说重载函数“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’

09-05 02:01