1. ホーム
  2. c

[解決済み] C言語での未宣言(この関数での初使用) [閉鎖]

2022-01-28 16:28:36

質問

検索でこれを入力すると、似たような"like"質問がいくつか出てきますね。しかし、私が見た中で重複していないものはすべて、C以外の他のソースからのものでした。 私は、明らかにヘッダーで宣言された構造を持っています。

struct Statistics //Super basic structure.
{
 int mean;
 int median;
 int variance;
 int grades;
 int min;
 int max;
}; 

これらの関数はすべて、構造体がなくても正常に動作しているため、構造体を使おうとしているのです。きれいにするためと、純粋に理解するためです。 私のエラーは次のようなものです。 'stats' 未定義 (この関数での最初の使用) この構造体が含まれる関数を呼び出すと

ここでエラーになりました。

display_grades_distribution(m, grades_scale,n, stats);

そこで質問ですが、この構造体が「未宣言」であること、あるいはプログラムの中で「最初に使われた」ことを、コンパイラはどのようにして知ることができるのでしょうか?

SNIPPET

void display_grades_distribution(int m, int grades_scale[11][m], int n,         
struct Statistics stats[])
{
 printf("Mean = %22f\n", stats[0].mean);
 printf("Variance = %18f\n", stats[0].variance);
 printf("Median = %20f\n", stats[0].median);
 printf("min = %16d\n", stats[0].min);
 printf("max = %16d\n", stats[0].max);
}

int main(void)
{
 //-------------------------------------------
  for(m = 0, m < num_assignments; m++)
  {
  struct Statistics stats[5];
  stats[m].mean = calculate_mean(grades,n);
  stats[m].median = calculate_median(grades,n);
  stats[m].variance = calculate_mean(grades,n);
  stats[m].min = calculate_min(grades,n);
  stats[m].max = calculate_max(grades,n);
  }
 //-------------------------------------------
 **display_grades_distribution(m, grades_scale,n, stats);** //This causes the error.
}

解決方法は?

struct Statistics stats[5]; は、ブロック内のローカル変数で for ステートメントの後に表示されません。 for のループになります。

から取り出してください。 for ステートメントを使用します。

int main(void)
{
  struct Statistics stats[5];
  //-------------------------------------------
  for(m = 0, m < num_assignments; m++)
  {
    stats[m].mean = calculate_mean(grades,n);
    stats[m].median = calculate_median(grades,n);
    stats[m].variance = calculate_mean(grades,n);
    stats[m].min = calculate_min(grades,n);
    stats[m].max = calculate_max(grades,n);
  }
  //-------------------------------------------
  display_grades_distribution(m, grades_scale,n, stats);
}