当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [求助] 用C::B编译错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变
帖子发表于 : 2008-11-13 14:58 
头像

注册: 2008-10-24 10:59
帖子: 11
地址: 重庆
送出感谢: 0 次
接收感谢: 0 次
代码:
代码:
void Reader::DelBook(Book it)
{
    for(int i=CounterB;i>0;i--)   //错误:   在‘i’使用过时的绑定|
        if(books[i].GetCode()==it.GetCode())
        break;
        for(int j=i;j<CounterB;j++)  //错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变化|
        books[j]=books[j+1];

    CounterB--;
}

与代码:
代码:
void Reader::DelMagazine(Magazine it)
{
    for(int i=CounterM;i>0;i--)  //错误:   在‘i’使用过时的绑定|
        if(magazines[i].GetCode())
        break;

    for(int j=i;j<CounterM;j++)   //错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变化|
        magazines[j]=magazines[j+1];

    CounterM--;
}

我查过了,好像是编译器版本的问题(版本太新),但是我一直没有想到办法解决,请大家赐教,如何解决?谢谢!
我在线等候,谢谢了!!


_________________
人应“愤“发自强,没有愤怒,怎能自强!加油,洪哥!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: [求助] 用C::B编译错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变
帖子发表于 : 2008-11-13 19:30 
头像

注册: 2008-06-18 22:02
帖子: 186
送出感谢: 0 次
接收感谢: 1
上下两段代码结构类似,这里以第2段为例:

引用:
代码:
void Reader::DelMagazine(Magazine it)
{
for(int i=CounterM;i>0;i--) //错误: 在‘i’使用过时的绑定|
if(magazines[i].GetCode())
break;
//mark: i的作用域已经结束
for(int j=i;j<CounterM;j++) //错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变化|
magazines[j]=magazines[j+1];

CounterM--;
}


其中第一个for循环中只有一个语句
if(magazines[i].GetCode())
break;
在第一个for循环初始语句中定义的变量i,当for循环结束时,其作用域已经结束,在第二个for循环已经不能再使用i。
在一些比较旧的对标准支持不那么好的编译器上,可以这么写,变量i在第一个for循环后还可以用,但是新版编译器一般对标准支持比较好,所以会报错


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [求助] 用C::B编译错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变
帖子发表于 : 2008-11-13 20:04 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
你的知识要更新了

for语句中声明的变量不能在for的作用域之外使用

int j=i 这里i已经不存在了


_________________
目前负债150多万


页首
 用户资料  
 
4 楼 
 文章标题 : Re: [求助] 用C::B编译错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变
帖子发表于 : 2008-11-18 12:45 

注册: 2006-03-10 15:10
帖子: 3182
地址: xi'an China
送出感谢: 0 次
接收感谢: 2
smhong 写道:
代码:
代码:
void Reader::DelBook(Book it)
{
    for(int i=CounterB;i>0;i--)   //错误:   在‘i’使用过时的绑定|
        if(books[i].GetCode()==it.GetCode())
        break;
        for(int j=i;j<CounterB;j++)  //错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变化|
        books[j]=books[j+1];

    CounterB--;
}

我查过了,好像是编译器版本的问题(版本太新),但是我一直没有想到办法解决,请大家赐教,如何解决?谢谢!
我在线等候,谢谢了!!


不是编译器版本太新,是C++ 标准就是这么要求的。如果真不报错,只能说明一个问题,你所用的编译器不符合标准。

代码:
for(int i=CounterB;i>0;i--)

这样声明的i只能在这个循环体内使用。

如果你不想对代码做较大的改动,直接改为
代码:
int i;
for(i=CounterB;i>0;i--)

即可。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: [求助] 用C::B编译错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变
帖子发表于 : 2008-11-19 11:26 
头像

注册: 2008-10-24 10:59
帖子: 11
地址: 重庆
送出感谢: 0 次
接收感谢: 0 次
谢谢各位指教,大家辛苦了!呵呵。 :em51

另外,还有个问题一直困扰着我,虽然能通过编译,但是都要提示警告!
代码如下:
代码:
int main(void)
{
    Book b1("谭浩强","C++面向对象程序设计","P306/5",10001);  //|9|警告: 不建议使用从字符串常量到‘char*’的转换|
    Book b2("洪哥","操作系统教程","P306/7",10002);  //|10|警告: 不建议使用从字符串常量到‘char*’的转换|

    Magazine m1("计算机学报",13,20001);   //|12|警告: 不建议使用从字符串常量到‘char*’的转换|
    Magazine m2("计算机应用",2,20002);  //|13|警告: 不建议使用从字符串常量到‘char*’的转换|

    Reader r1("张三",30001);    //|15|警告: 不建议使用从字符串常量到‘char*’的转换|
    Reader r2("李四",30002);   //|16|警告: 不建议使用从字符串常量到‘char*’的转换|
    r1.Show();
    r2.Show();

    r1.AddBook(b1);
    r1.AddBook(b2);
    r1.ShowBooks();

    r2.AddMagazine(m1);
    r2.AddMagazine(m2);
    r2.DelMagazine(m1);
    r2.ShowMagazines();
}


编译提示如下:
代码:
/resurce/exam5-7.cpp||In function ‘int main()’:|
/resurce/exam5-7.cpp|9|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|9|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|9|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|10|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|10|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|10|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|12|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|13|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|15|警告: 不建议使用从字符串常量到‘char*’的转换|
/resurce/exam5-7.cpp|16|警告: 不建议使用从字符串常量到‘char*’的转换|
||=== Build finished: 10 errors, 0 warnings ===|


请问,这种情况在标准C++中如何处理!!


_________________
人应“愤“发自强,没有愤怒,怎能自强!加油,洪哥!


页首
 用户资料  
 
6 楼 
 文章标题 : Re: [求助] 用C::B编译错误: 在新的 ISO‘for’作用域中,‘i’的名称查找有变
帖子发表于 : 2008-11-20 2:35 
头像

注册: 2008-05-03 23:05
帖子: 383
送出感谢: 0 次
接收感谢: 0 次
说一点点:不知道对不对?
类似"C++面向对象程序设计"这样的都是字符串常量,不可修改值的,而char *是可以通过指针修改字符值的
建议char * 改为 const char *


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译