首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

可否申请跨文件的局部变量?该怎么解决

2012-04-08 
可否申请跨文件的局部变量?示例:main.cppC/C++ codeint process(int k)int main(){vector int afor(in

可否申请跨文件的局部变量?
示例:

main.cpp

C/C++ code
int process(int k);int main(){    vector <int> a;    for(int i=0;i<5;i++)    {        int n;        process(i);        a.push_back(n);    }}


c1.cpp
C/C++ code
int process(int k){    extern int n;    n=k;}


会出现编译错误,如果将main中的int n申请为全局变量即可编译,但不希望n有这么长的寿命,能否使得n的寿命局限在某函数内,但可被一个在函数内使用但文件外定义的函数使用?

[解决办法]
把n的地址传给process即可
[解决办法]
探讨
示例:

main.cpp


C/C++ code


int process(int k);
int main()
{
vector <int> a;
for(int i=0;i<5;i++)
{
int n;
process(i);
a.push_back(n);
}
}

……

[解决办法]
用命名空间。
在相关文件上用namepace定义函数及全局变量,在main文件上可以用using namespace调用,这样有命名空间的可以调度,没有使用的就无法调度。
[解决办法]
你把n定义到文件作用域就行了,否则另外的模块根本链接不到n
C/C++ code
void process(int k);int n;int main(){    vector <int> a;    for(int i=0;i<5;i++)    {    //    int n;        process(i);        a.push_back(n);    }    for(int i=0;i<5;i++)    {        cout << a[i] << endl;    }    cin.get();}
[解决办法]
探讨
用命名空间。
在相关文件上用namepace定义函数及全局变量,在main文件上可以用using namespace调用,这样有命名空间的可以调度,没有使用的就无法调度。

[解决办法]
如果仅限某函数、甚至是函数某区间内,那确实是不行的,不过,你可以在process上做文章,即外部变量参数化:
C/C++ code
int process(int k,int *n=NULL){  if(!n)return -1;  //failed  *n = k;  return 0;}int main(){    vector <int> a;    for(int i=0;i<5;i++)    {        int n;        process(i,&n);        a.push_back(n);    } ....} 

热点排行