【问题标题】:C++ Lookup of i changed for ISO我的 C++ 查找更改为 ISO
【发布时间】:2013-05-09 18:46:24
【问题描述】:

我有下面的字典代码。

void Dictionary::translate(char out_s[], const char s[])
{

for (int i=0;i<numEntries;i++)
{
   if (strcmp(englishWord[i], s)==0)
       break;
}
if (i<numEntries)
strcpy(out_s, elvishWord[i]);

这给了我错误name lookup of i changed for iso,并提到如果我使用-fpermissive,代码将被接受。如果我尝试在 for 循环之外初始化变量,它会产生一大堆错误。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 将 i 的声明移动到 for 循环的上方。

标签: c++ function iso


【解决方案1】:

不是“for iso”(也许阅读整个错误消息...),而是针对 ISO C++。问题是i 变量的范围只是for 循环(因为它的定义在循环的初始化内部)。由于您似乎想在循环外使用它,因此声明如下:

int i;
for (i = 0; i < foo; i++) {
    // ...
}

do_safe_stuff_with(i); // valid

【讨论】:

    【解决方案2】:

    当你这样做时,例如

    for (int i=0;i<numEntries;i++)
    

    那么变量i 只是循环的局部变量,你不能真正在循环之外使用它。

    如果要在循环外使用i,则需要在循环外声明:

    int i;
    for (i=0;i<numEntries;i++)
    

    【讨论】:

      【解决方案3】:

      ifor 循环条件子句中声明。它在for 循环之后的if 子句中不可见。

      尝试:

      int i = 0;
      for (;i<numEntries;i++)
      {
         if (strcmp(englishWord[i], s)==0)
             break;
      }
      if (i<numEntries)
      

      【讨论】:

        猜你喜欢
        • 2014-12-20
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多