错误是:
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++);
现在它正在工作!!我无法理解原因。
答案 0 :(得分:22)
你在内部for语句的末尾有一个分号。这样就结束了jj
的范围,所以它在块内不可见。
编辑
你已经解决了范围问题,但仍然只执行你的for循环
<nothing>;
括号后删除分号!
答案 1 :(得分:4)
for (int jj = 0; jj < routeVector[i].selectedBranchesVector.size(); jj++);
这一行以分号结尾!它不应该:))
答案 2 :(得分:3)
在for循环结束后,某些编译器可能不接受使用变量'jj'。由于变量是在for循环中声明的,因此在执行后会立即销毁它。因此,当你在for循环之外声明你的迭代变量时,它仍然存在以供进一步使用。
实际上它并不像那样工作,这就是为什么你可以强制编译器通过添加'-fpermissive'来忽略错误。
答案 3 :(得分:0)
错误:for(...;...;...;);
正确:for(...;...;...;)
您不应该使用分号;