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

问题描述:

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的参数得到一个错误?

Studentmain()中定义。 定义它的主要外部,使得它在相同的范围内NumGrads

struct Student 
{ 
     int id; 
     bool isGrad; 
}; 

int main() 
{ 
     ... 
} 

你的结构定义main,和你的NumGrads功能之外main定义

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

将您的结构的定义移动到main上方并解决您的问题。

结构定义是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){ 

} 
+0

+1 NumGrads'声明补充修正 – Peopleware 2013-02-20 15:33:27

struct Student声明的主里面,所以int NumGrads无法看到它。此外,该函数未在main中称之为未声明的位置。在这一点上,唯一可用的声明是int NumGrads(),这是一个不同的功能。