为什么我得到的错误anil未在范围内声明,即使它是在main函数中声明的?
#include <iostream>
using namespace std;
struct student
{
int rollno,classa;
};
void initial(student *);
void display(student *);
int main()
{ student anil={10,11};
initial(&anil);
display(&anil);
return 0;
}
void initial(student *)
{
anil->rollno=100;anil->classa=10;}
void display(student *)
{
cout<<anil->rollno<<anil->classa;
}
答案 0 :(得分:1)
main
函数的范围不会扩展到initial
函数。对于要在范围内的变量,对该变量的引用必须在定义之后和结束大括号之前,该大括号与变量定义之前的最新开始大括号匹配。你也可以在任何花括号之外声明变量;它们可以在声明之后的任何地方访问,但也可以隐式static
。
int a;
someFunc()
{
int b;
} // This closing curly brace ends the scope of 'b'
int c = a + 1; // ok, a was declared outside any brace
答案 1 :(得分:1)
anil
在main()
内声明,因此它是本地的,对其他函数不可见(即其范围仅延伸到main()
正文的末尾)。
要从其他函数访问它,您需要将它作为参数传递给它们(您已经在做)和在函数签名中具有此参数的名称。所以,在你的情况下,你需要做这样的事情:
void initial(student * ps)
{
ps->rollno=100;ps->classa=10;
}
void display(student * ps)
{
cout<<ps->rollno<<ps->classa;
}
现在,这些函数将能够以anil
的名称访问指向ps
的指针,并传递给它们。
答案 2 :(得分:0)
一个简单的解决方法就是将指针参数命名为anil,就像这样
void initial(student *anil)