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的参数出错吗?
答案 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)
Student
在main()
中定义。
在main之外定义它,使其与NumGrads
:
struct Student
{
int id;
bool isGrad;
};
int main()
{
...
}
答案 3 :(得分:3)
struct Student
在main中声明,因此int NumGrads
无法看到它。此外,在main
中调用该函数时,该函数未声明。此时,唯一可用的声明是int NumGrads()
,这是一个不同的功能。