2

オーバーロードされた関数「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;
}

メインの calMean 関数の関数呼び出しでエラーが発生しました。私は構造が初めてなので、calMean 関数呼び出しでリスト引数リストを記述する方法が間違っていると思います。これを修正する方法はありますか? 構造体のメンバースコアの平均を計算しようとしています。

4

1 に答える 1

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()

これは、 に対して 2 つの宣言があることを意味しますが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’
于 2013-04-15T05:49:48.660 に答える