菜鸟问题:为什么j要再次定义?大大求解~

kidundead 2009-12-18 09:32:52
#include <iostream.h>
void main()
{
int a[3][3];
for ( int i = 0, temp = 1; i <= 2; i++)
{
for ( int j = 0; j <= 2; j++,temp++)
{
a[i][j] = temp;
cout << a[i][j] << " " ;
}
cout << endl;
}
cout << " After transform :" << endl;
for ( j = 0; j <= 2; j++) //这里不再次定义j时,会出错~~
{
for ( i =0 ; i <= 2; i++)
{
cout << a[i][j] <<" ";
}
cout << endl;
}

}

不理解捏,哪位帮忙解释下~
...全文
111 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lirg8405 2009-12-18
  • 打赏
  • 举报
回复
VC6的问题,你的程序在VC6可以运行,但是标准C++不行,必需加上int j
MasterLuo 2009-12-18
  • 打赏
  • 举报
回复
按照C++标准,i,j都是需要重新定义的。
现在的VC己经改正过来了,VC6太古老了。
lie1213 2009-12-18
  • 打赏
  • 举报
回复
括号里的变量只对于这个组从头到尾有效 它是局部变量 你的第二个FOR语句是另外一个组了 所以还要再定义
ypb362148418 2009-12-18
  • 打赏
  • 举报
回复
因为在VS2005中,for循环里头定义的变量只在for中有效,你应该定义为全局的int j;这样才不会报错
panyc33 2009-12-18
  • 打赏
  • 举报
回复
块的概念
kidundead 2009-12-18
  • 打赏
  • 举报
回复
囧,那c++用什么编好捏?
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kidundead 的回复:]
我用vc编的~
他只提示要定义j
error C2065: 'j' : undeclared identifier
Error executing cl.exe.
[/Quote]
vc6研制出来的时候,c++标准还没完善,所以建议换编译器

珍爱生命,原理vc6
aaron0211 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kidundead 的回复:]
噢噢~~但为什么i不用重新定义呢?
[/Quote]
刚才试了一下,确实是这样。
用的是6.0
  • 打赏
  • 举报
回复
你这个是依赖编译器的。

你是用VC6吧?优化程度不一样,结果也可能不一样。

kidundead 2009-12-18
  • 打赏
  • 举报
回复
我用vc编的~
他只提示要定义j
error C2065: 'j' : undeclared identifier
Error executing cl.exe.
bastenf 2009-12-18
  • 打赏
  • 举报
回复
error C2065: 'j' : undeclared identifier
error C2065: 'i' : undeclared identifier

编译器问题, 鉴定完毕!
  • 打赏
  • 举报
回复
跟作用域有关,两个i,j都要再次定义,否则会报错
kidundead 2009-12-18
  • 打赏
  • 举报
回复
噢噢~~但为什么i不用重新定义呢?
昵称很不好取 2009-12-18
  • 打赏
  • 举报
回复
你的j不是全局变量,j的作用域只限于上面定于它的括号内,下面是看不到j的,所以要重新定义
凹哩凹哩 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kidundead 的回复:]
噢噢~~但为什么i不用重新定义呢?
[/Quote]

因为i没有被主函数的那个大括号以外的括号括起来,而j被括起来了
longyan0712 2009-12-18
  • 打赏
  • 举报
回复

for ( int i = 0, temp = 1; i <= 2; i++)
{
for ( int j = 0; j <= 2; j++,temp++)
{
a[i][j] = temp;
cout << a[i][j] << " " ;
} //j的作用域结束
cout << endl;
} //i的作用域结束
cout << " After transform :" << endl;
for ( j = 0; j <= 2; j++) //重新定义j {
for ( i =0 ; i <= 2; i++)//重新定义i
{
cout << a[i][j] <<" ";
}
cout << endl;
}

我想应该是这样的吧

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧