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
。
答案 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?