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

结构定义是本地的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 回答
6

Student中定义main()。在 main 之外定义它,使其与以下范围相同NumGrads

 struct Student
 {
      int id;
      bool isGrad;
 };

 int main()
 {
      ...
 } 
于 2013-02-20T15:23:50.750 回答
3

struct Student在 main 内部声明,所以int NumGrads看不到它。此外,该函数在您调用它时未声明main。此时,唯一可用的声明是int NumGrads(),这是一个不同的函数。

于 2013-02-20T15:23:23.433 回答