error: name lookup of 'first' changed for ISO 'for' scoping [-fpermissive]


//读一组整数到vector对象,计算首尾配对元素的和并输出
//使用迭代器访问vector中的元素
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector <int> ivec;
    int ival;
    //读入数据到vector对象
    cout<<"Enter numbers(Ctrl+Z to end):"<<endl;
    while(cin>>ival)
     ivec.push_back(ival);
    //计算首尾配对元素的和并输出
    if(ivec.size()==0){
      cout<<"No element?!"<<endl;
      return -1;
     }
     cout<<"Sum of each pair of counterpart element in the vector:"
      <<endl;
     vector<int>::size_type cnt=0;
     for(vector<int>::iterator first=ivec.begin(),last = ivec.end()-1;first<last;++first,--last){
         cout<<*first+*last<<"/t";
         ++cnt;
         if(cnt %6 ==0)  //每行输出六个和
             cout<<endl;
     }
     if(first==last) //提示居中元素没有求和
         cout<<endl
            <<"The center element is not been summed"
           <<"and its value is"
             <<*first<<endl;
     return 0;
}


在ubuntu下用g++编译会出现如下错误:

/mywork/mytest/iterator/main.cpp:88: error: name lookup of 'first' changed for ISO 'for' scoping [-fpermissive]

/mywork/mytest/iterator/main.cpp:88: (if you use '-fpermissive' G++ will accept your code)

错误的原因: for循环中在初始化时同时定义的变量的作用域范围的一个问题。 ISO/ANSI C++ 把在此定义的变量的作用域范围限定在 for 循环体内,也就是说,在循环体之外这个变量是无效的。但是编译的时候可以加参数-fpermissive,就没有问题了。如果不加这个参数,直接把for中定义并初始化的变量,定义与初始化分离:

vector<int>::iterator first;

vector<int>::iterator last;

for( first=ivec.begin(),last = ivec.end()-1;first<last;++first,--last){
         cout<<*first+*last<<"/t";
         ++cnt;
         if(cnt %6 ==0)  //每行输出六个和
             cout<<endl;
     }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值