'iter'的名称查找已更改为新的ISO'for'范围

Lui*_*uis 4 c++

我正在尝试编译下面的两个文件,但是从编译器收到一条错误消息:gcc 4.3.3(Linux)

该错误位于使用以下方式签署的行中:LINE WITH ERROR

我做错了什么,我该怎么改呢?

路易斯...............................

$ g++ -c b.h b.cpp 
b.cpp: In function 'void calcularDesempPop(std::vector<Individuo, std::allocator<Individuo> >&)':
b.cpp:19: error: name lookup of 'iter' changed for new ISO 'for' scoping
b.cpp:17: error:   using obsolete binding at 'iter'
Run Code Online (Sandbox Code Playgroud)

...............................文件:b.cpp

#include <iostream>
#include <algorithm>
#include "desempenho.h"

using std::cout;
using std::endl;

struct Individuo {
    vector<double> vec;
    double desempenho;
};



void calcularDesempPop(vector<Individuo>& pop) {
    for (vector<Individuo>::iterator iter = pop.begin();
                    iter != pop.end(); ++iter);//LINE WITH ERROR
        iter->desempenho = calcularDesempenho(iter->vec);
        cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

...............................文件:bh

#ifndef GUARD_populacao_h
#define GUARD_populacao_h

//#include <algorithm>
#include <iostream>
#include "cromossoma.h"

struct Individuo {
    vector<double> vec;
    double desempenho;
};


void calcularDesempPop(vector<Individuo>& pop);

#endif
Run Code Online (Sandbox Code Playgroud)

Chu*_*dad 11

$ 6.5.3/3 - "如果for-init-statement是一个声明,声明的名称范围扩展到for语句的末尾."

因此,无法在for循环范围之外访问它.在for循环后立即检查分号.很可能你并不是那么想的.


Cub*_*bbi 9

你在for()之后留下了一个分号:

for (vector::iterator iter = pop.begin(); iter != pop.end(); ++iter);
Run Code Online (Sandbox Code Playgroud)

这意味着下一行不是循环体的一部分,并且iter在其中未定义.