c++变量生命周期的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 22:38:12
在一个函数中,一个变量的生命周期为什么不一样?
别人写的程序完全可以运行,但是我稍微改动一点点,就会出现很多个redefinition; multiple initialization这样的错误?而且我写的程序就不能像他写的那样比如说
for(int i = 0; i < machine; i++)
{
int count = 0;
for(int j = 0; j< job; j++)
{
//ÅжÏÈÎÎñÊÇ·ñ·ÖÅäµ½»úÆ÷ÉÏ
if(allocationtable[i*job + j] == true)
{
time1[count] = time[j];
time2[count] = time[job + j];
count++;
}
}
johnsontime[i] = johnsonrule(count, time1, time2);
}
int jobtime = 0;
for(int i = 0; i < machine; i++)
{
if(johnsontime[i] > jobtime)
{
jobtime = johnsontime[i];
}
}
这时候程序就会出现多次定义i的错误,这个是别人的源代码,我copy过来就不能用但是他的源程序,我就完全可以用为什么呢?
我用的是vc6.0的编译器,他说他是在vs2003下建的控制台程序,你看看吧。而且他给我的程序我运行一点问题都没有,可是如果我改动一点点,编译一次,就会出现redefinition; multiple initialization,再改回他写的代码都没用还是会

VC6.0中间类似使用2次
for(int i....)
第二次使用的时候会报错i重复定义
所以把int i定义在for语句外面,也就是定义成main函数的局部变量就没事了
这样还有个好处是和C语法相同,移植到C编译器上也没有问题

for(int i = 0; i < machine; i++)
{
int count = 0;
for(int j = 0; j< job; j++)
{
if(allocationtable[i*job + j] == true)
{
time1[count] = time[j];
time2[count] = time[job + j];
count++;
}
}
johnsontime[i] = johnsonrule(count, time1, time2);
}
int jobtime = 0;
for(i = 0; i < machine; i++)
{
if(johnsontime[i] > jobtime)
{
jobtime = johnsontime[i];
}
}

VC6.0下,C++变量的生命周期是由{ }决定的~~
一个{ }中只能定义一个同名变量
给你的程序两个最外面的for再套一个{ }就行

if(allocationtable[i*job + j] == true)
此处的i周期已经结束 你的第一个是在for循环中定义 故循环结束 变量消失