【问题标题】:Error message: name lookup of ‘jj’ changed for ISO ‘for’ scoping, (if you use ‘-fpermissive’ G++ will accept your code)错误消息:“jj”的名称查找已更改为 ISO“for”范围,(如果您使用“-fpermissive”G++ 将接受您的代码)
【发布时间】:2011-07-02 10:27:17
【问题描述】:

错误是:

In function ‘int returnShortestWeightedBranch(std::vector<route, std::allocator<route> >*)’:
error: name lookup of ‘jj’ changed for ISO ‘for’ scoping
note: (if you use ‘-fpermissive’ G++ will accept your code)

代码是:

for (int i = 0; i< routeVector.size(); i++)
        {
            if (routeVector[i].exitPoint == exitPointDetailsVector[preserveL].exitPoint)
            {
                cout << "\n-----------parent: " << routeVector[i].exitPoint;
                branch obj;
                obj.connectedExitPoint = exitPointDetailsVector[preserveI].exitPoint;
                routeVector[i].selectedBranchesVector.push_back (obj);

                for (int jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);
                {
                    cout << "\n-----------branch: " << routeVector[i].selectedBranchesVector[jj].connectedExitPoint;
                }
            }
        }

这可能是什么问题?

编辑 1:

我更改了以下内容:

for (int jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);

到:

int jj;
for (jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);

现在它正在工作!我不明白其中的原因。

【问题讨论】:

  • 不,它不起作用。 {} 部分的代码只执行一次。
  • 顺便说一句,错误消息反映了曾几何时,早期的 C++ 允许在循环之后使用 for 循环中定义的变量。此规则在 ISO 标准制定过程中有所更改。

标签: c++ compiler-errors


【解决方案1】:

您在内部 for 语句的末尾有一个分号。这结束了jj 的范围,因此它在块内不可见。

编辑
您已经解决了范围问题,但您的 for 循环仍在执行

<nothing>;

括号后面的分号去掉!

【讨论】:

    【解决方案2】:
    for (int jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);
    

    此行以分号结尾!它不应该:)

    【讨论】:

      【解决方案3】:

      在 for 循环结束后,某些编译器可能不接受使用变量“jj”。由于变量是在 for 循环中声明的,所以它在执行后立即被销毁。因此,当您在 for 循环之外声明迭代变量时,它会保留在那里以供进一步使用。

      实际上它不是这样工作的,这就是为什么您可以通过添加“-fpermissive”来强制编译器忽略错误。

      【讨论】:

        【解决方案4】:

        错误:for(...;...;...;);

        是的:for(...;...;...;)

        您不应该使用分号,;

        【讨论】:

          猜你喜欢
          • 2013-06-12
          • 2014-12-20
          • 1970-01-01
          • 1970-01-01
          • 2016-10-27
          • 2018-01-05
          • 1970-01-01
          • 1970-01-01
          • 2016-07-25
          相关资源
          最近更新 更多