错误没有重载函数的实例“calMean”匹配参数列表

时间:2013-04-15 05:38:41

标签: c file structure

我有错误说没有重载函数“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函数调用中编写列表参数列表的方式是错误的,无论如何要解决这个问题?我正在尝试计算结构中成员得分的平均值。

1 个答案:

答案 0 :(得分:0)

麻烦很有趣。你展示的不是你正在编译的代码,这总是坏消息。你拥有的是:

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()的两个声明,但它们在第一个参数中引用了不同的类型。因此,“超载”声称。

您必须使用C ++编译器。

我无法想到一种可以编写代码的方式,因此RECORD会改变这样的含义。我试过这段代码:

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’