zoukankan      html  css  js  c++  java
  • C++:关于“error C2374: 'i' : redefinition; multiple initialization”

    转:http://zhidao.baidu.com/question/392437962.html

    问题:

    #include<iostream>
    
    using namespace std;
    
    int main(){
    	int array1[2][3]={1,2,3,4,5};
    	int array2[2][3]={{1,2},{4}};
    
    	cout<<"array1: ";
    	for(int i=0;i<2;++i)
    		for(int j=0;j<3;++j)
    			cout<<array1[i][j]<<",";
    		cout<<"\narray2: ";
    		for(int i=0;i<2;++i)
    			for(int j=0;j<3;++j)
    				cout<<array2[i][j]<<",";
    			cout<<"\n";
    
    }
    说明一下 我将数组2的i改为m等值 运行成功 将数组2的j改为m却运行不成功!!这是什么原因!!
    #include<iostream>
    
    using namespace std;
    
    int main(){
    	int array1[2][3]={1,2,3,4,5};
    	int array2[2][3]={{1,2},{4}};
    
    	cout<<"array1: ";
    	for(int i=0;i<2;++i)
    		for(int j=0;j<3;++j)
    			cout<<array1[i][j]<<",";
    		cout<<"\narray2: ";
    		for(int m=0;m<2;++m)
    			for(int k=0;k<3;++k)
    				cout<<array2[m][k]<<",";
    			cout<<"\n";
    
    }
    这个是可以的!!

    解决:

    主要是定义重复的意思(redefinition)
    一般在同一段代码中不要出现变量重复定义,否则就会报出错;
    你这里面的出错这是和编译器有关,vc报错而有的不报错
    for(int i=0;i<2;++i)
    	for(int j=0;j<3;++j)
    			cout<<array1[i][j]<<",";
    		cout<<"\narray2: ";
    for(int i=0;i<2;++i)
    	for(int j=0;j<3;++j)
    		cout<<array2[i][j]<<",";
    你看看这里面两个for循环中的i都在同一层,然后你生命了两次int所以就出错了。你只要把第二个int去掉就不会有错了
    for(int i=0;i<2;++i)
    	for(int j=0;j<3;++j)
    			cout<<array1[i][j]<<",";
    		cout<<"\narray2: ";
    for(i=0;i<2;++i)
    	for(int j=0;j<3;++j)
    		cout<<array2[i][j]<<",";
    所以你后来把i改成m就没错就是因为变量重复定义没有了。
    那么你一定又会问j为什么就可以?
    这是因为j是在for循环里面,第一个j是第一个for里面的变量,第二个j是第二个for里面的变量,他们并不在同一个区间,所以就不会出错了。如果你把他们放其一就还会出错,例如下面程序就会报错
    for(int i=0;i<2;++i){
    	for(int j=0;j<3;++j)
    			cout<<array1[i][j]<<",";
    	for(int j=0;j<3;++j)   //要把第二个int给去掉才不会出错
    		cout<<array2[i][j]<<",";
    }
    为了防止以上这些错误,你可以在开始的时候一起定义,后面不定义也不会出错了,比如
    #include<iostream>
    
    using namespace std;
    
    int main(){
    	int array1[2][3]={1,2,3,4,5};
    	int array2[2][3]={{1,2},{4}};
            int i,j;   //在for循环上面一起定义了,后面就不用定义
    	cout<<"array1: ";
    	for(i=0;i<2;++i)
    		for(j=0;j<3;++j)
    			cout<<array1[i][j]<<",";
    		cout<<"\narray2: ";
    		for(i=0;i<2;++i)
    			for( k=0;k<3;++k)
    				cout<<array2[m][k]<<",";
    			cout<<"\n";
    
    }
  • 相关阅读:
    ArcGIS python field 字段
    shapefile 输出的地理处理注意事项
    arcgis python RefreshActiveView CLEAR_SELECTION
    arcgis python 判断是数据库或是文件夹
    Arcengine获得arcgis安装的版本
    python获得坐标系信息
    修复几何 (数据管理)原理
    Python获取指定目录下所有子目录、所有文件名
    python的路径
    用Python写一个将Python2代码转换成Python3代码的批处理工具
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2440401.html
Copyright © 2011-2022 走看看