在本地课程中访问问题

时间:2010-10-14 05:00:51

标签: c++ scope local-class

void foobar(){
    int local;
    static int value;
     class access{
           void foo(){
                local = 5; /* <-- Error here */
                value = 10;
           }
     }bar;    
}   
void main(){
  foobar();
}

为什么不在local编译中访问foo()? OTOH我可以轻松访问和修改静态变量value

4 个答案:

答案 0 :(得分:1)

在本地类中,您不能使用/访问封闭范围内的自动变量。您只能使用封闭范围内的静态变量,外部变量,类型,枚举和函数。

答案 1 :(得分:1)

来自标准文档 Sec 9.8.1

  

可以在函数定义中声明类;这样的类叫做本地类。本地类的名​​称是本地的   到它的封闭范围。本地类位于封闭范围的范围内,并且对外部名称具有相同的访问权限   功能与封闭功能一样。本地类中的声明只能使用类型名称,静态变量,   外部变量和函数,以及封闭范围内的枚举器。

标准文档本身的一个例子,

int x;
void f()
{
static int s ;
int x;
extern int g();
struct local {
int g() { return x; } // error: x is auto
int h() { return s; } // OK
int k() { return ::x; } // OK
int l() { return g(); } // OK
};
// ...
}

因此无法访问本地类中的自动变量。您可以将本地值设为static,也可以将其设置为全局值,以适合您设计的 为准。

答案 2 :(得分:0)

local设为静态,然后您就可以访问它了

答案 3 :(得分:0)

可能是因为你可以声明超出函数范围的对象。

foobar() called // local variable created;
Access* a = new Access(); // save to external variable through interface
foobar() finished // local variable destroyed

...


savedA->foo(); // what local variable should it modify?