这个结构被定义,所以为什么函数认为它不是?
问题描述:
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的参数得到一个错误?
答
Student
在main()
中定义。 定义它的主要外部,使得它在相同的范围内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){
}
答
struct Student
声明的主里面,所以int NumGrads
无法看到它。此外,该函数未在main
中称之为未声明的位置。在这一点上,唯一可用的声明是int NumGrads()
,这是一个不同的功能。
+1 NumGrads'声明补充修正 – Peopleware 2013-02-20 15:33:27