错误:此范围内未声明'anil'

时间:2016-03-22 23:32:59

标签: c++ c++11

为什么我得到的错误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;
}

3 个答案:

答案 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)

anilmain()内声明,因此它是本地的,对其他函数不可见(即其范围仅延伸到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)