这个结构被定义了,为什么函数认为它不是?

时间:2013-02-20 15:20:01

标签: c++ arrays parameters struct undefined

C ++新手。只需制作一个简单的struct / array程序。为什么我不能像我打算在这里传递一系列结构?

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 个答案:

答案 0 :(得分:12)

您的结构已在 <{1}}内定义,main函数在NumGrads 之外定义

这意味着你的结构被定义在你的函数可以看到它的范围之外。

将结构的定义移到main之上,问题就解决了。

答案 1 :(得分: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){

}

答案 2 :(得分:6)

Studentmain()中定义。 在main之外定义它,使其与NumGrads

在同一范围内
 struct Student
 {
      int id;
      bool isGrad;
 };

 int main()
 {
      ...
 } 

答案 3 :(得分:3)

struct Student在main中声明,因此int NumGrads无法看到它。此外,在main中调用该函数时,该函数未声明。此时,唯一可用的声明是int NumGrads(),这是一个不同的功能。