• 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";
    
    }
  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2440401.html
Copyright © 2020-2023  润新知