回 帖 发 新 帖 刷新版面

主题:大哥们帮忙看下是什么问题!谢谢大家了

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i=0;i <10;i++)
        v.push_back(i);
    for(int i=0;i <v.size();i++)    //p108页
        cout<<v[i]<<",";
        cout<<endl;
    for(int i=0;i <v.size();i++)
      v[i]=v[i]*10;
    for(int i=0;i <v.size();i++)
       cout<<v[i]<<",";
          cout<<endl;
}

出现的问题!
C:\Documents and Settings\Administrator\桌面\有问题的C++程序\intvector.cpp(11) : error C2374: 'i' : redefinition; multiple initialization
        C:\Documents and Settings\Administrator\桌面\有问题的C++程序\intvector.cpp(9) : see declaration of 'i'
C:\Documents and Settings\Administrator\桌面\有问题的C++程序\intvector.cpp(14) : error C2374: 'i' : redefinition; multiple initialization
        C:\Documents and Settings\Administrator\桌面\有问题的C++程序\intvector.cpp(9) : see declaration of 'i'
C:\Documents and Settings\Administrator\桌面\有问题的C++程序\intvector.cpp(16) : error C2374: 'i' : redefinition; multiple initialization
        C:\Documents and Settings\Administrator\桌面\有问题的C++程序\intvector.cpp(9) : see declaration of 'i'
C:\Documents and Settings\Administrator\桌面\有问题的C++程序\intvector.cpp(19) : warning C4508: 'main' : function should return a value; 'void' return type assumed
执行 cl.exe 时出错.

回复列表 (共3个回复)

沙发

for循环体里声明的int i会在整个函数空间里存在,这是C++的一个特性,所以这里你有四个for,就是说编译器认为你声明了四次 i ,你可以这样做.
int i = 0 ;
for(;i <10;i++)
        v.push_back(i);
    for(i=0;i <v.size();i++)    //p108页
        cout<<v[i]<<",";
        cout<<endl;
    for(i=0;i <v.size();i++)
      v[i]=v[i]*10;
    for(i=0;i <v.size();i++)
       cout<<v[i]<<",";
          cout<<endl;
另外,main函数要求返回值你没有返回,加上下面代码在函数结束前
return 0 ;

板凳

谢谢大哥 问题是解决了 但还是有点不明白 为什么去掉INT后就会成立?
  我是THINGKING C++原文写的 ?书上第107页

3 楼

for中声明的int i将会在整个函数域中存在,同一个域中,不能重复声明相同名称的变量,否则就是重复声明.
当第一个for循环体中声明一个int i后,i这个变量就存在于整个main的域中,也就是说i这个变量名不能再次在main函数体里声明.那么在第二个for循环体里再次写int i 来声明一个变量i就被编译器视为是非法语法了.
我记得早几年的时候是可以这样重复声明的,不知道是从什么时候改的.
把计数变量声明到循环体前面是一个不错的选择.在实际工程中还可以给它起一个不错的名子使人一看就知道这个变量是干什么的,总比i这个不知道是干什么的要强的多.

我来回复

您尚未登录,请登录后再回复。点此登录或注册