0

C++ の初心者。簡単な構造体/配列プログラムを作成するだけです。ここで意図したように構造体の配列を渡すことができないのはなぜですか?

int NumGrads();

int main()
{
      struct Student {
          int id;
          bool isGrad;
      }; 

    const size_t size = 2;
    Student s1, s2;
    Student students[size] = { { 123, true },
                             { 124, false } };

    NumGrads(students, size);

    std::cin.get();
    return 0;
}

int NumGrads(Student Stu[], size_t size){

}

参照または値のいずれかで渡すことと関係があるに違いないことを理解していますが、main() で定義した場合、NumGrads のパラメーターでエラーが発生することはありませんか?

4

4 に答える 4

12

構造体はmainで定義され、NumGrads関数はので定義されますmain

これは、構造体が、関数が参照できる範囲外で定義されていることを意味します。

構造体の定義を上に移動するmainと、問題が解決されます。

于 2013-02-20T15:22:26.290 に答える
6

Studentで定義されていmain()ます。と同じスコープになるように、メインの外で定義しますNumGrads

 struct Student
 {
      int id;
      bool isGrad;
 };

 int main()
 {
      ...
 } 
于 2013-02-20T15:23:50.750 に答える
6

構造体定義は に対してローカルmainです。あなたの定義を含め、それ以外は何mainも見ることができません。NumGrads関数内に構造体定義を持つことは、あまり一般的ではありません。通常、名前空間スコープで定義します。

また、NumGrads宣言は定義の引数の型と一致しません。

// Define Student at namespace scope
struct Student {
    int id;
    bool isGrad;
}; 

int NumGrads(Student[], size_t); // The argument types are now correct

int main()
{
    // ...
}

int NumGrads(Student Stu[], size_t size){

}
于 2013-02-20T15:22:49.657 に答える
3

struct Studentmain 内で宣言されているため、int NumGrads参照できません。さらに、関数は で呼び出した時点で宣言されていませんmain。その時点で、使用できる唯一の宣言はint NumGrads()、別の関数である です。

于 2013-02-20T15:23:23.433 に答える