C++:关于“error C2374: 'i' : redefinition; multiple initialization”
生活随笔
收集整理的這篇文章主要介紹了
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";}總結
以上是生活随笔為你收集整理的C++:关于“error C2374: 'i' : redefinition; multiple initialization”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 话里话外:项目部如何不再形同虚设
- 下一篇: IRP 续二